实战网页实现平滑滚动

yumo6662周前 (04-23)技术文章10


  • 在导航中,我们使用#简单的实现了,现在我们要实现,点击导航自动跳转指定的节去,通过id去选择
<ul class="main-nav-list">
          <li><a class="main-nav-link" href="#how">工作流程</a></li>
          <li><a class="main-nav-link" href="#meals">餐品展示</a></li>
          <li><a class="main-nav-link" href="#testimonials">用户案例</a></li>
          <li><a class="main-nav-link" href="#pricing">餐品价格</a></li>
          <li><a class="main-nav-link nav-cta" href="#cta">免费试用</a></li>
        </ul>

这样我们点击导航就能跳转到指定的节了


  • 但是这样跳转非常的生硬,我们可以添加一个参数让动画变得更加得流畅
html {
  font-size: 62.5%;
  overflow-x: hidden;
  scroll-behavior: smooth;    ##scroll-behavior: smooth;是CSS属性,用于控制浏览器滚动时的动画效果。当这个属性设置为smooth时,浏览器会以平滑的动画效果滚动到指定位置,而不是瞬间跳转。
}

但是,这个参数并不是所有浏览器都支持!


  • 当然我们可以使用js来实现平顺滑动的效果
const allLinks = document.querySelectorAll('a:link');
allLinks.forEach(function(link) {
  link.addEventListener('click', function(e) {
    e.preventDefault();
    const href = link.getAttribute('href');
    if (href === "#") window.scrollTo({
      top: 0,
      behavior: "smooth",
    });
    if (href !== "#" && href.startsWith('#')) {
       const sectionEl = document.querySelector(href); 
       sectionEl.scrollIntoView({
        behavior: "smooth"
       });
    }
      
  });
  
});
##这段JavaScript代码实现了一个简单的响应式导航栏。它为所有链接添加了一个点击事件监听器,当用户单击链接时,它会阻止默认行为并获取链接的href属性值。如果href属性值为“#”,则将窗口滚动到页面顶部。如果href属性值不为“#”,则检查它是否以“#”开头。如果是,则获取对应的页面元素,并将窗口滚动到该元素的位置,以实现平滑滚动效果。
  • 注意,这里我们在HTML引用了一段JS,为了解决不兼容的问题
<script defer src="https://unpkg.com/smoothscroll-polyfill@0.4.4/dist/smoothscroll.min.js"></script>
##这段JavaScript代码引入了一个名为"smoothscroll-polyfill"的JavaScript库,并将其设置为在文档加载时异步加载(defer属性)。这个JavaScript库的作用是在不支持平滑滚动的浏览器中实现平滑滚动效果。在某些较老的浏览器中,平滑滚动效果可能无法正常工作,这个JavaScript库可以解决这个问题。它通过在不支持平滑滚动的浏览器中使用JavaScript模拟平滑滚动效果来实现这一点。因此,当用户单击页面中的链接时,无论用户使用什么浏览器,都可以获得平滑的滚动效果。

这样就能实现平顺滑动的效果了;


现在还有一个问题

当我们用手机的时候,点击导航栏,跳转的时候,这个导航还是不会消失;我们可以用JS来实现跳转之后导航关闭


 if (link.classList.contains("main-nav-link"))
      headerEl.classList.toggle("nav-open");

这段代码是用来实现简单响应式导航栏的,当点击具有 "main-nav-link" 类的链接时,它会切换 "nav-open" 类在头部元素上的存在。这个类通常用于控制导航栏的显示和隐藏。具体来说,如果头部元素上已经有 "nav-open" 类,则它将被删除,否则它将被添加。这个类的存在与否决定了导航栏是否可见。

相关文章

20 个让人惊叹的 JavaScript 单行代码技巧,效率瞬间提升

掌握一些简洁有力的单行代码技巧可以大幅提高编码效率,让JavaScript代码更加优雅。分享 20 个实用且令人惊叹的 JavaScript 单行代码,可能为你的工作带来便利。1. 数组去重const...

CSS view():JavaScript 滚动动画的终结

前言CSS view () 方法可能会标志着 JavaScript 在制作滚动动画方面的衰落。如何用 5 行 CSS 代码取代 50 多行繁琐的 JavaScript,彻底改变网页动画每次和 UI/U...

Selenium 滚动页面至元素可见的方法,看完直接可上手了!

今天为大家带来的内容是:Selenium 滚动页面至元素可见的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!滚动页面  在...

selenium:操作滚动条的方法(8)

selenium支持几种操作滚动条的方法,主要介绍如下:使用ActionChains 类模拟鼠标滚轮操作使用函数ActionChains.send_keys发送按键Keys.PAGE_DOWN往下滑动...

从0开始写一个虚拟滚动组件

如果一个页面有1W+条数据,该怎么渲染比较好。不管是在我们的实际项目开发中还是在面试的过程中都会遇到类似的问题。相信很多同学会想到分页。当然这也是最传统也是最保底的解决方案了。如果有开发过electr...

如何实现页面顶部, 自定义滚动进度条样式

关键词:自定义滚动条、自定义顶部滚动条要实现页面顶部的自定义滚动进度条样式,可以按照以下步骤进行:在HTML中添加滚动进度条的容器元素,通常可以使用一个元素作为容器,放在页面顶部的合适位置。<d...