我正在使用流行的 jQuery scrollTo / localScroll插件来创建一个单页导航系统,该系统会自动将窗口滚动到各种锚标记。我让它工作没问题,但在阻止它排队动画时遇到了麻烦。
我有一个 ID 为“main_nav”的无序列表,我用它来跳到锚点:
<ul id="main_nav">
<li><a href="#one">One<a> </li>
<li><a href="#two">Two</a></li>
<li><a href="#three">Three</a> </li>
<li><a href="#four">Four</a> </li>
</ul>
调用该函数时,有一个名为“stop”的参数,它应该通过 jquery stop() 函数清除所有当前排队的动画。该参数在插件中默认为'true',但我还是指定了它。该插件还默认将窗口引用为滚动目标。我这样调用函数:
$(document).ready(function() {
$('#main_nav').localScroll({
duration:2000,
stop:true
});
});
这可行,但“停止”参数被忽略...如果我快速连续单击所有四个链接,页面将一个接一个地滚动到每个链接,总共需要 8 秒。不理想!如果我将整个页面包装在一个容器 div 中,给它一个高度,并将其设置为溢出:滚动;然后使用 localScroll 函数定位这个 div,然后 stop 参数起作用。例如,当这样调用时,不再有动画排队:
$(document).ready(function() {
$('#main_nav').localScroll({
target: $('#container'),
duration:2000,
stop:true
});
});
似乎当插件引用一个 div 作为要滚动的目标时,它能够执行 jquery stop() 函数,但是当目标设置为“窗口”时,停止函数不起作用。
我尝试为窗口对象创建一个 jQuery 包装器,并将其作为目标引用,如下所示:
$(document).ready(function() {
$('#main_nav').localScroll({
target: $('window'),
duration:2000,
stop:true
});
});
...但这也不起作用。在插件本身中,默认值为:
$localScroll.defaults = {
duration:1000, // How long to animate.
axis:'y', // Which of top and left should be modified.
event:'click', // On which event to react.
stop:true, // Avoid queuing animations
target: window, // What to scroll (selector or element). The whole window by default.
reset: true // Used by $.localScroll.hash. If true, elements' scroll is resetted before actual scrolling
};
有人对如何阻止动画提示有任何想法吗?
我正在使用:jQuery 1.6.1、scrollTo 1.4.2、localScroll 1.2.7