按钮跳转到下一个锚点

Posted

技术标签:

【中文标题】按钮跳转到下一个锚点【英文标题】:button to jump to next anchor 【发布时间】:2019-01-15 08:07:55 【问题描述】:

我有一个启用了部分滚动的 wordpress 网站,并添加了 2 个应该跳转到网站上的上一页或下一页的按钮和 2 个应该跳转到网站上的上一章或下一章的按钮。

基于这篇帖子Goto Next Anchor Button 我添加了脚本,但浏览器返回锚点的长度 = 0,document.getElementByTagName() 返回一个很大的数组 并且 document.getElementByName() 也没有用。

var anchordivs = document.querySelectorAll('[data-anchor][data-id]');
var anchors = anchordivs.length;
var loc = window.location.href.replace(/#.*/,'');
var nextAnchorName = 0;

var anchorName = window.location.hash.replace(/#/,'');


if (anchorName)

    for (var i=0, iLength=anchordivs.length; i<iLength; i++) 
        if (anchordivs[i].dataset.anchor == anchorName) 

            nextAnchorName = anchordivs[i+1 % iLength].dataset.anchor;
        break;
        


if (!nextAnchorName)
   nextAnchorName=anchordivs[0].dataset.anchor;


window.location.href = loc + '#' + nextAnchorName;

点击按钮后,网站应滚动到网站的下一部分。

编辑:wordpress 确实在各自的 div 中创建了锚点作为数据锚点: &lt;div ... data-anchor="c_home"&gt;。这是仍然不起作用的。单击该按钮时,站点不会跳转到新的锚点,并且在浏览器的地址行中手动输入锚点也不起作用。 JS 代码已经过测试,现在可以使用了。

也许缺少跳转的问题是它都在一页上?

我通过将最后一个代码行更改为以下内容来使其工作:

location.href ='#' + nextAnchorName;
location.reload();

现在每次点击都会重新加载网站,但它可以工作。这不是我想要的。

【问题讨论】:

【参考方案1】:

我改变了var anchors = document.body.getElementsByTagName("a");nextAnchorName = anchors[i++ % iLen].name;

function goToNextAnchor() 
  var anchors = document.body.getElementsByTagName("a");
  var loc = window.location.href.replace(/#.*/,'');
  var nextAnchorName;

  // Get name of the current anchor from the hash
  // if there is one
  var anchorName = window.location.hash.replace(/#/,'');

  // If there is an anchor name...
  if (anchorName) 

    // Find current element in anchor list, then
    // get next anchor name, or if at last anchor, set to first
    for (var i=0, iLen=anchors.length; i<iLen; i++) 
      if (anchors[i].name == anchorName) 
        nextAnchorName = anchors[i++ % iLen].name;
        break;
      
    
  

  // If there was no anchorName or no match,
  // set nextAnchorName to first anchor name
  if (!nextAnchorName) 
    nextAnchorName = anchors[0].name;
  

  // Go to new URL
  window.location.href = loc + '#' + nextAnchorName;


【讨论】:

我试过了,但是使用按钮时 nextAnchorName 返回“未定义”。 我在网站本身上看到它,使用按钮时:127.0.0.1:8080/wordpress/#undefined 不幸的是,firefox 和 chromium 都不想向我显示变量的值 我的锚点被隐藏了,我在 div 部分找到了它们:。我可以访问这个数据锚点吗? @Zehke 是的。如果您可以访问href 标签,请改用window.location.href = loc + '#' + nextAnchorName; 按钮大部分工作,循环工作,地址行正确更新。唯一没有发生的事情是,单击按钮时,按钮不会滚动到下一个 div-data-anchor

以上是关于按钮跳转到下一个锚点的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 提交按钮不跳转到下一页和上一页

在 iPhone 上使用 UINavigationController 跳转到下一个控制器

用js实现两个按钮效果,上一页 下一页,点上一页按钮页面跳转到上一页,点下一页按钮页面跳转到下一页。

JAVA,登录界面怎么跳转到下一个界面啊,下一个界面是已经写好的页面?

thinkphp怎么跳转到指定页面的锚点

微信小程序怎么实现点击跳转到指定锚点?