首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免在滚动事件处理程序中递归调用scrollIntoView()?

如何避免在滚动事件处理程序中递归调用scrollIntoView()?
EN

Stack Overflow用户
提问于 2019-12-13 19:40:05
回答 1查看 274关注 0票数 0

我想把我的网站分成几个屏幕大小的部分,当用户开始滚动时自动滚动到下一个部分。为了实现这一点,我编写了如下代码:

代码语言:javascript
运行
复制
$(window).scroll(function() {
    getElementToScroll().scrollIntoView({behavior: "smooth"});
}

但是调用scrollIntoView()会导致递归。我怎样才能避免这个问题?也许还有另一种更合适的滚动元素进入视图的方式?

附言:流畅的行为是必要的。

EN

回答 1

Stack Overflow用户

发布于 2019-12-13 20:04:47

您可以使用CSS Scroll Snap来实现此行为。它不需要JavaScript,只需要CSS。在撰写本文时,除了IE和Edge之外,大多数浏览器都有这个接口的full support

请查看下面的示例以了解它的实际效果。

代码语言:javascript
运行
复制
html,
body,
.container{
  width: 100%;
  height: 100%;
}

.container {
  scroll-snap-type: y mandatory;
  overflow-y: scroll;
}

section {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 10em;
  width: 100%;
  scroll-snap-align: start;
  scroll-snap-stop: always
}

section:first-of-type {
  background: red;
}

section:nth-of-type(2) {
  background: orange;
}

section:nth-of-type(3) {
  background: yellow;
}

section:nth-of-type(4) {
  background: green;
}

section:nth-of-type(5) {
  background: blue;
}

section:nth-of-type(6) {
  background: purple;
}
代码语言:javascript
运行
复制
<article class="container">
  <section>First section</section>
  <section>Second section</section>
  <section>Third section</section>
  <section>Fourth section</section>
  <section>Fifth section</section>
  <section>Sixth section</section>
</article>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59321901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档