Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 滚动到div上的动画,可变偏移量top无法正常工作_Javascript_Jquery_Animation_Var_Scrolltop - Fatal编程技术网

Javascript 滚动到div上的动画,可变偏移量top无法正常工作

Javascript 滚动到div上的动画,可变偏移量top无法正常工作,javascript,jquery,animation,var,scrolltop,Javascript,Jquery,Animation,Var,Scrolltop,当我点击右键导航菜单时,我很难找到正确的幻灯片。单击菜单按钮时,会显示链接列表。第一次单击其中一个链接将滚动到正确的幻灯片。如果您尝试单击其他链接,它将断开。如果刷新页面并单击某个链接,它将带您转到正确的幻灯片;如果再次单击同一链接,它将动画显示到第一张幻灯片;现在,如果单击任何其他链接,它将滑动到正确的幻灯片 我不知道它为什么这样做,它几乎需要再次转到第一张幻灯片才能找到正确的幻灯片。我将一个变量传递给从菜单项设置的幻灯片动画,并查找元素偏移量。当console.logging记录这些变量时,

当我点击右键导航菜单时,我很难找到正确的幻灯片。单击菜单按钮时,会显示链接列表。第一次单击其中一个链接将滚动到正确的幻灯片。如果您尝试单击其他链接,它将断开。如果刷新页面并单击某个链接,它将带您转到正确的幻灯片;如果再次单击同一链接,它将动画显示到第一张幻灯片;现在,如果单击任何其他链接,它将滑动到正确的幻灯片

我不知道它为什么这样做,它几乎需要再次转到第一张幻灯片才能找到正确的幻灯片。我将一个变量传递给从菜单项设置的幻灯片动画,并查找元素偏移量。当console.logging记录这些变量时,变量似乎设置不正确,但当移除动画时,变量似乎设置正确。我完全搞不懂它为什么这样做。请帮忙


它之所以如此跳跃,是因为.offset()获取元素相对于文档的位置[,因此当您使用scrollTop将要重置的页面位置设置为0时,该元素的.offset()将被重置为0,因为它现在位于文档的顶部。如果使用.position()也一样

因此,当您再次单击导航时,您告诉页面将scrollTop设置为0,因此它会进入页面顶部。如果您单击另一个元素,它将从0获取其位置,因此继续工作,或者如果您在页面的较低位置,它将基于当前位置相对于滚动位置的偏移量,因此它可能是一个负数或比0的位置小的数字。希望这有点道理,我不确定我解释得很好

要获取要转到的元素的值,需要获取当前滚动位置,然后将该位置添加到下一个要查看的部分,然后将其用作scrollTop()值

这里有一个工作演示:您可以在控制台中看到当前正在使用的偏移位置的值,以及基于当前scrollTop()值的位置。本质上,这是您应该进行的唯一更改

scrollPosition = htmlbody.scrollTop() + slideElementOffset = slideElement.offset().top;

htmlbody.scrollTop(scrollPosition);

希望这能有所帮助

如果我将变量htmlbody=$(“#slidesContainer”);更改为变量htmlbody=$(“html,body”);并将变量totalVerticalSlides=$(“#slidesContainer”).children(“.mainSlide”).length;更改为变量totalVerticalSlides=$(“#body”).Childrent(“.mainSlide”).length;并在index.html中删除包装幻灯片的div。但animate在iPad上不适用于html和body。我需要滚动来处理div元素。顺便说一句,我会小心地将客户端工作发布到stackoverflow,可能这一切都很好,但你永远不知道,有些客户端可能过度保护,不需要任何东西我很高兴知道他们已经为他们完成了工作。如果可以的话,最好用JSFIDLE之类的工具对你的问题进行一个快速的模拟,然后发布。谢谢andyface,我会尝试一下,让你知道它是如何运行的。非常感谢andyface对我的帮助。这很有效!我会投你一票,但我对堆栈溢出是个新手,我的评分很低,但我真的你真的很感激你的帮助。保持健康。没问题,我想我仍然可以把我的答案记为正确的
scrollPosition = htmlbody.scrollTop() + slideElementOffset = slideElement.offset().top;

htmlbody.scrollTop(scrollPosition);