更改方向导致 requestAnimationFrame 滚动“闪烁”?

问题描述 投票:0回答:1

我正在处理由第三方软件生成的网站,我无法真正更改或删除生成的任何 JavaScript。我遇到这个问题,每次用户单击导航按钮或忘记必填字段并单击“继续”时,页面都会自动滚动到顶部。现在我有这段代码,强制它滚动回任何有问题的元素(受到 stackoverflow 答案的启发,但不幸的是我再也找不到它了:(如果我找到它,将在此处链接它)

    function scrollTo(element, timeMS=200, offset=0) {
        const elementPosition = element.offsetTop;
        const startPosition = scrollElementGlobal.scrollTop;
        const scrollDist = (elementPosition + offset) - startPosition;
        const startTime = performance.now();
        function scrollStep(timestamp) {
            const currentTime = timestamp - startTime;
            const scrollProgress = Math.min(currentTime / timeMS, 1);
            scrollElementGlobal.scrollTop = startPosition + scrollDist * scrollProgress
            // currentScroll = scrollElementGlobal.scrollTop
            if(scrollProgress < 1) {
                requestAnimationFrame(scrollStep)
            }
        }
        requestAnimationFrame(scrollStep)
    }

我通过单击事件附加到按钮,基本上如下所示

continue_button.addEventListener('click', function() {
    if(something_went_wrong) {
        scrollTo(element_that_went_wrong)
        return;
    }
    
    if(something_else_went_wrong) {
        scrollTo(other_element_that_went_wrong)
        return;
    }
})

这在桌面上运行良好,但是在移动设备上,当方向改变时,它会有点中断(第一次单击它不会产生动画,并且会像默认行为一样自动滚动回页面顶部,第二次它会滚动,但页面将“闪烁”,因为用户会在一瞬间看到页面顶部的任何内容)。有什么办法可以解决这个问题吗?谢谢!

javascript html css responsive-design responsive
1个回答
0
投票

发现问题了。还有另一个

scrollTo
函数,它要么来自浏览器,要么由我们使用的第三方软件生成。将函数名称更改为其他名称,问题就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.