【发布时间】:2020-05-19 07:24:35
【问题描述】:
if (document.querySelector(target)) {
event.preventDefault();
document.querySelector(target).scrollIntoView({ behavior: 'smooth' });
}
即使event.preventDefault 用于避免默认锚标记行为,scrollIntoView 以上的行为平滑也不起作用。功能在 IE 和 firefox 中有效,但在 chrome 版本中无效>=81
var dropdownElement = document.getElementById('dropdown');
dropdownElement.addEventListener('change', function(ev) {
var containerChoosed = document.getElementById('container_' + this.value);
containerChoosed.scrollIntoView({
block: "center",
behaviour: "smooth"
});
});
div {
border: 1px solid;
height: 400px;
margin: 16px;
}
#container_1 {
background-color: yellow;
}
#container_2 {
background-color: blue;
}
#container_3 {
background-color: green;
}
#container_4 {
background-color: red;
}
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<select id="dropdown">
<option value="1">Div 1</option>
<option value="2">Div 2</option>
<option value="3">Div 3</option>
<option value="4">Div 4</option>
</select>
<div id="container_1">div 1</div>
<div id="container_2">div 2</div>
<div id="container_3">div 3</div>
<div id="container_4">div 4</div>
</body>
</html>
正如您所看到的,当在下拉列表中选择任何 div 时,它会滚动到相应的 div,但平滑的行为仅在 chrome 中不起作用,并且 chrome 的版本是版本 81.0.4044.138(官方构建)
【问题讨论】:
-
scrollINtoView在 Chrome 中有很长的错误历史,其中一些现在是 still open。在某些情况下,几乎每次都可以找到解决方法。您想为您的案例添加可运行的演示吗? -
在上面添加了一个代码 sn-p 来描述我的问题
标签: javascript smooth-scrolling