可以使用 CSS 的 'position: sticky' 属性来实现黏住顶部的效果,同时使用 JavaScript 的 scroll 事件和 offsetTop 属性来实现点击回到原位置的效果。

首先,在需要黏住的 li 元素上添加如下 CSS 样式:

li.sticky {
  position: sticky;
  top: 0;
}

这样,当用户滚动到该 li 元素位置时,它就会黏住在顶部。

接下来,使用 JavaScript 监听页面的 scroll 事件,当用户滚动到黏住的 li 元素位置时,为它添加一个 class 名。

window.addEventListener('scroll', function() {
  var li = document.querySelector('.sticky');
  if (window.pageYOffset >= li.offsetTop) {
    li.classList.add('sticky-top');
  } else {
    li.classList.remove('sticky-top');
  }
});

这里使用了 classList 属性,当用户滚动到 li 元素位置时,为它添加一个名为 'sticky-top' 的 class,这个 class 可以用来实现更多的样式效果。

最后,为黏住的 li 元素添加点击事件,当用户点击它时,页面会滚动到该 li 元素原本的位置。

var stickyLi = document.querySelector('.sticky');
stickyLi.addEventListener('click', function() {
  window.scrollTo({
    top: stickyLi.offsetTop,
    behavior: 'smooth'
  });
});

这里使用了 JavaScript 的 scrollTo 方法,它可以平滑地滚动页面到指定位置。在这里,我们将页面滚动到黏住的 li 元素的 offsetTop 位置,也就是它原本的位置。

完整代码如下:

HTML:

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li class='sticky'>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
  <li>Item 6</li>
  <li>Item 7</li>
</ul>

CSS:

li.sticky {
  position: sticky;
  top: 0;
}

li.sticky-top {
  background-color: #ccc;
}

JavaScript:

window.addEventListener('scroll', function() {
  var li = document.querySelector('.sticky');
  if (window.pageYOffset >= li.offsetTop) {
    li.classList.add('sticky-top');
  } else {
    li.classList.remove('sticky-top');
  }
});

var stickyLi = document.querySelector('.sticky');
stickyLi.addEventListener('click', function() {
  window.scrollTo({
    top: stickyLi.offsetTop,
    behavior: 'smooth'
  });
});

原文地址: https://www.cveoy.top/t/topic/nlKA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录