【问题标题】:Smooth Scrolling Stopped Working - What Am I Doing Wrong?平滑滚动停止工作 - 我做错了什么?
【发布时间】:2012-11-13 02:54:41
【问题描述】:

我已经在我的主页上实现了CSS-Tricks Smooth Scrolling snippet,它运行良好,直到我决定重建我的主页。现在它根本不起作用。

这里有一些关于我所做的事情的历史。我正在尝试建立一个单页滚动网站。最初,我在 Wordpress 中创建了一个页面并插入了 3 个名为“关于”、“工作”和“联系人”的 div。我实现了平滑滚动 sn-p,一切运行良好。然而,后来我决定做更多的研究,在此期间发现了 Wordpress 自定义帖子类型的魔力。我决定使用自定义模板 (page-include.php) 重建我的主页,该模板使用 WP_query 包含 3 个不同的页面。其中两个页面(“关于”和“联系”)是实际的 Wordpress 页面,但第三个(“工作”)只是一个自定义循环,用于拉动我的自定义帖子类型。长话短说,当我转到设置>阅读并将主页更改为指向新页面时,平滑滚动停止工作。当您单击导航栏中的链接时,页面会跳转到适当的位置,但根本不会滚动。如果我将主页更改回旧版本,滚动仍然可以正常工作。关于它为什么停止工作的任何想法?

如果有帮助,here's my site。另外,如果您想知道,我的主题基于Roots

【问题讨论】:

  • 你有没有比较过 HTML 源代码,看看是否缺少某些东西。例如一个脚本。

标签: javascript jquery wordpress scroll smooth-scrolling


【解决方案1】:

JavaScript 执行时发生错误,这就是脚本退出的原因,因此没有应用平滑滚动。

我已经看到,您在plugins.js 中的脚本在href 的开头使用井号(#) 遍历所有链接。不幸的是,您的导航栏中有一个链接,就像这样:<a href="#anchor3">Anchor 3</a>

现在您的网站中没有像 <div id="#anchor3"> 这样的部分,这就是您的脚本引发错误的原因。

问题是您的 plugins.js 中的这行代码,大约在第 30 行:

var targetOffset = $target.offset().top;

$target 为空,尝试alert($target.length)console.log($target.length) 来获取证明。现在要解决此问题,请更改此行:

if (target) {

到这里:

if (target && $target.length) {

现在在调用.offset() 之前,您的脚本将检查您的jQuery 选择中是否有任何元素。如果$target 为空,则不会触发,脚本将继续工作。

【讨论】:

  • 非常感谢!那效果很好。再问一个问题:你怎么知道 JS 执行时出错了?我试图弄清楚如何检查,但我不知道在哪里看......
  • 一般情况下,Firefox、Chrome、Safari 甚至 IE 都有一个内置控制台,它会输出错误。我最好使用 Chrome,它具有最好的功能恕我直言。看看这个guide
  • 谢谢,我去看看。
  • 还有一件事:当我单击其中一个链接时,页面会向下滚动到正确的位置,然后又向上跳了一下。我以为我早先已经弄清楚了(通过这样做padding-top: 80px; margin-top: -80px;),但现在无论我如何更改边距和填充,它仍然会跳跃。我知道我可以删除这一行 location.hash = target; 并且它会起作用,但我不想丢失 URL 更改。关于如何在保留 URL 更改的同时解决此问题的任何想法?很抱歉一直问这么多问题。
  • 抱歉,我真的不知道如何解决这个问题。你是对的,哈希变化是你的页面跳跃的原因。修改后浏览器跳转到对应id的<div>的位置。不幸的是 event.preventDefault()return false 没有帮助。我发现this question 有人建议在href 上使用与ID 不同的名称,例如href="#about"id="section-about"。然后在移动到div之前用JS添加“section-”。
猜你喜欢
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 2013-06-12
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
相关资源
最近更新 更多