jquery动画在页面加载期间不会滚动到正确的位置

u7up0aaq  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(281)

我有一个按钮,按下时滚动到“目标”div。按钮和目标div将作为外部小部件注入站点。按钮的功能:

scrollToElement = function() {
jQuery([document.documentElement, document.body]).animate({
scrollTop: jQuery(".targetElementClass").offset().top - 10
}, 1000);
//other code
}

似乎在页面加载时,第一次按下按钮会滚动到页面的不同位置。这只会在页面加载期间发生,因为在加载期间,在滚动顶部计算和“目标”div的实际位置之间似乎存在某种竞争条件。
我想到了“停止(真的,真的)。动画(……”),但当我从文档中阅读时,它可以停止页面上的其他动画,因此我认为它可能会干扰客户网站的功能,我排除了这一点(如果我错了,请让我知道)。
除了停止功能外,我是否还有其他选项来尝试解决此问题?另外,我想知道是否其他代码执行“jquery().stop()”会导致这种行为,是否有某种方法可以解决这种冲突?

iezvtpos

iezvtpos1#

我有一个很小的Scroll函数,我认为它工作得很好,而且非常动态。您只需创建一个按钮,并在onclick括号中添加您的目标id/类。首先,在.html文件中需要一个如下所示的按钮:

<button type="button" onclick="scrollFunction(putYourTargetDivHere)">This is a button</button>

然后在javascript/jquery文件中使用以下命令:

function scrollFunction(target) {
            $('html,body').animate({
                scrollTop: $(target).offset().top
            },
                'slow');   
}

如果要在加载页面时运行该函数,可以使用以下命令:

window.onload = function() {
  scrollFunction(YourTargetDivHere);
};

向马克斯问好

798qvoo8

798qvoo82#

似乎我的直觉是正确的,在我的小部件停止滚动动画后加载的某些元素,在动画的“完成”和“失败”功能上添加额外的动画后,滚动现在到达了正确的位置(尽管有点缓慢)。

window.scrollToElement = function() {
    jQuery([document.documentElement, document.body]).animate({
            scrollTop: jQuery(".targetelementClass").offset().top - 10
    }, {
  duration: 1000,
  queue: false,
  complete: function(){
             jQuery([document.documentElement, document.body]).animate({
            scrollTop: jQuery(".targetelementClass").offset().top - 10
             }, {
                      duration: 500,
                      queue: false});
        },
  fail: function(){
             jQuery([document.documentElement, document.body]).animate({
            scrollTop: jQuery(".targetelementClass").offset().top - 10
             }, {
                      duration: 500,
                      queue: false});
        }
});
    // other code
}

其结果是,如果出现故障,或者有什么东西在实际完成之前将动画标记为已完成,则会生成另一个动画。这是不完美的,因为滚动有时似乎落后,我认为更多的调整是必要的。

相关问题