if (document.querySelector(target)) {
event.preventDefault();
document.querySelector(target).scrollIntoView({ behavior: 'smooth' });
}
虽然使用了event.preventDefault
来避免默认锚点标签行为,但scrollIntoView
上方的平滑滚动行为在Chrome版本>=81中无法工作。在IE和Firefox中可以正常工作。
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浏览器中它的平滑滚动效果不起作用,而且版本是81.0.4044.138(官方构建)。
scrollIntoView
在Chrome浏览器中存在很长的bug历史,其中一些至今仍未解决。在某些情况下,几乎每次都可以找到解决方法。您是否想为您的情况添加可运行的演示? - Kyr