小编典典

如何使window.scrollTo()具有平滑效果

css

我可以使用以下内容滚动到200px

btn.addEventListener("click", function(){
    window.scrollTo(0,200);
})

但是我想要一个平滑的滚动效果。我该怎么做呢?


阅读 2473

收藏
2020-05-16

共1个答案

小编典典

2018更新

现在,您可以使用window.scrollTo({ top: 0, behavior: 'smooth' })来平滑滚动页面。

const btn = document.getElementById('elem');



btn.addEventListener('click', () => window.scrollTo({

  top: 400,

  behavior: 'smooth',

}));


#x {

  height: 1000px;

  background: lightblue;

}


<div id='x'>

  <button id='elem'>Click to scroll</button>

</div>

较旧的解决方案

您可以执行以下操作:

var btn = document.getElementById('x');



btn.addEventListener("click", function() {

  var i = 10;

  var int = setInterval(function() {

    window.scrollTo(0, i);

    i += 10;

    if (i >= 200) clearInterval(int);

  }, 20);

})


body {

  background: #3a2613;

  height: 600px;

}


<button id='x'>click</button>

ES6 递归方法:

const btn = document.getElementById('elem');



const smoothScroll = (h) => {

  let i = h || 0;

  if (i < 200) {

    setTimeout(() => {

      window.scrollTo(0, i);

      smoothScroll(i + 10);

    }, 10);

  }

}



btn.addEventListener('click', () => smoothScroll());


body {

  background: #9a6432;

  height: 600px;

}


<button id='elem'>click</button>
2020-05-16