所以我一直试图弄清楚这一点,似乎无法得到它。动画滚动很buggy
我使用由圆圈组成的导航(请参阅下面的网站),当用户点击一个导航时,它会将他/她转发到相应的幻灯片。
当您单击时,它有时会一直滑回窗口的开始处(margin-left = 0)。如果它一开始没有这样做,只需点击一下或两个,你最终会看到它。
下面是这车的代码:
$("#footer-slidenav .links a").click(function() {
// Get nav index
var slidenum = $(this).attr("id").slice(3);
// Setup slide selector with string to avoid issues
var slidetext = ".slide:eq(" + slidenum + ")";
slidenum = $(slidetext).offset().left;
console.log("Top: " + slidenum);
var offset2 = 0;
// Find window offset to center slide if screen is bigger than 1000px (size of one slide)
if (($(window).width() - 1000)/2 > 0) {
offset2 = ($(window).width() - 1000)/2;
}
// Slide window to slide # that was clicked
$("html:not(:animated), body:not(:animated)").animate({
scrollLeft: slidenum
}, 1000, function() {
console.log("Middle: " + slidenum);
// Callback to center slide and give a nice little animated touch
slidenum = $(slidetext).offset().left;
console.log("Bottom: " + slidenum);
$("html:not(:animated), body:not(:animated)").animate({
scrollLeft: (slidenum - offset2)
}, "fast");
});
return false;
});
我尝试之类的东西$("html:not(:animated), body:not(:animated)")
与其他几个类似的可能的解决方案,但错误依然存在。
任何建议将是伟大的,我很乐意接受任何想法,你们可能有。
谢谢。
检查你的变量slidenum是不是在改变它不应该改变(范围)...做一些像console.log(“A - ”+ slidenum);的console.log( “B - ” + slidenum);每次您将值设置为slidenum变量后。 – Tank
我添加了上面的代码,所以你可以看看控制台。由于某种原因,这似乎是两次调用回调。 – switz
双重回调被称为是因为你为body和html设置了动画(当你选择** html,body **时,它选择了两个元素而不是一个)。两个动画立刻就是邪恶的。 – yoavmatchulsky