我正在使用scrollTo插件并在'click'事件中的animate方法的回调函数中执行它。
页面滚动得很好,但是如果我使用鼠标滚轮或滚动条尝试重新启动,它就不会让我。它只是一种卡住和我打架 - 创造一个跳跃效果。大约一秒钟后,它恢复正常行为。
我无法显示这种情况发生的确切位置(不允许),但我复制了以下代码:
// This function finds the first item that has an opacity set to 1 (full)
function moveIt() {
var theItem = $('.work').filter( function(j) { return $(this).css('opacity') == 1 } ).eq(0);
$("html").scrollTo( theItem, 350 );
}
$("#work-menu-client a").click(
function () {
var val = $(this).attr("href");
val = val.substring(1, val.length);
if( val.length ) {
$(".work[data-client*='" + val + "']").animate({
opacity: 1
}, 350, function() {
// Complete
});
$(".work:not([data-client*='" + val + "'])").animate({
opacity: 0.05
}, 350, function() {
moveIt();
});
}
return false;
},
function () {
return false;
}
);
不要担心整个事情的作用,但是将这些代码放入回调函数中是不对的。几乎像它一直循环/重复回调所以我不能回去。
(如果你想知道,基本上,一个菜单允许我根据属性淡入和淡出某些项目,然后我滚动到第一次出现不透明度未被淡出的地方。)
非常感谢任何帮助。
我找到了一个有类似问题的人但是还没有解决,那里的反馈很少:JQUERY, scrollTo, after scrolling down, the page won't let me scroll up for a second... Y?
非常感谢, 迈克尔。
编辑:事实上,我刚刚注意到我无法向下滚动......所以基本上,我被困在它发送给我的位置。
答案 0 :(得分:3)
我也有这个问题,但错误/修复不是关于选择器逻辑。
问题在于我将点击处理程序绑定到不止一次触发scrollTo的锚点上,而没有解除旧的绑定。我正在实现ajax加载和重新注册事件处理程序,但没有取消注册旧的。修复只涉及对$(selector).off() before $(selector).on(...)
的调用,我没有必要改变,因为这是我仍然想要的行为。