gpt4 book ai didi

javascript - 为什么滚动行为 :smooth not working but javascript window. 滚动平滑?

转载 作者:太空狗 更新时间:2023-10-29 13:16:49 30 4
gpt4 key购买 nike

我有一个导航栏可以向下滚动到 anchor 元素。导航栏在主体内部。

我的CSS:

body {
scroll-behavior: smooth;
}

在页面中,我也使用了一些javascript。一个是具有以下功能的 javascript,用于导航到其他页面元素:

window.scroll({
top : pos,
left : 0,
behavior : 'smooth'
});

使用 Chrome,当我调用 javascript 函数时,滚动很流畅。但是当我通过导航栏链接导航到 anchor 时,它并不流畅。

有人愿意向我解释为什么吗?

对于 Firefox,导航栏滚动和 javascript 功能也很流畅。我认为一个有效而另一个无效有点奇怪。

编辑:我的解决方法如下(普通 JS/适用于所有现代浏览器):

    let pos = document.querySelector(element).offsetTop;
if ('scrollBehavior' in document.documentElement.style) { //Checks if browser supports scroll function
window.scroll({
top : pos,
left : 0,
behavior : 'smooth'
});
} else {
smoothScrollTo(0, pos, 500); //polyfill below
}

和后备滚动功能:

window.smoothScrollTo = function(endX, endY, duration) {
let startX = window.scrollX || window.pageXOffset,
startY = window.scrollY || window.pageYOffset,
distanceX = endX - startX,
distanceY = endY - startY,
startTime = new Date().getTime();

// Easing function
let easeInOutQuart = function(time, from, distance, duration) {
if ((time /= duration / 2) < 1) return distance / 2 * time * time * time * time + from;
return -distance / 2 * ((time -= 2) * time * time * time - 2) + from;
};

let timer = window.setInterval(function() {
let time = new Date().getTime() - startTime,
newX = easeInOutQuart(time, startX, distanceX, duration),
newY = easeInOutQuart(time, startY, distanceY, duration);
if (time >= duration) {
window.clearInterval(timer);
}
window.scrollTo(newX, newY);
}, 1000 / 60); // 60 fps
};

最佳答案

基于 documentation , 滚动行为:平滑 不适用于 body 元素 ( try it ):

The scroll-behavior property of the HTML body element is not propagated to the viewport.

但它适用于其他选择器,例如 html ( try here )。

您也可以尝试纯 JavaScript 解决方案 ( example ):

function scrollToTop() {
window.scrollTo({
top: 1000,
behavior: 'smooth'
});
}

关于javascript - 为什么滚动行为 :smooth not working but javascript window. 滚动平滑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49636727/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com