实战网页实现平滑滚动

yumo6664个月前 (04-23)技术文章25


  • 在导航中,我们使用#简单的实现了,现在我们要实现,点击导航自动跳转指定的节去,通过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" 类,则它将被删除,否则它将被添加。这个类的存在与否决定了导航栏是否可见。

相关文章

最好用的滚动条美化插件——jQuery.NiceScroll

nicescroll 滚动条插件是一个非常强大的基于 jQuery 的滚动条插件,不需要增加额外的css,几乎全浏览器兼容。ie6+,实现只需要一段代码,侵入性非常小,样式可完全自定义,支持触摸事件,...

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

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

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

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

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

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

网页背景全屏就这?分享 1 段优质 CSS 代码片段!

大家好,我是大澈!本文约 700+ 字,整篇阅读约需 1 分钟。每日分享一段优质代码片段。今天分享一段 CSS 代码片段,使用 CSS 设置网页全屏背景图片,很简单。老规矩,先阅读代码片段并思考,再看...

微软将大幅改善Chrome和Edge体验:消除滚动延迟

来源:快科技Chrome和Edge是当前全球份额前二的浏览器,尤其是在Edge切换到Chromium开源生态后,微软也开始贡献大量优化代码。过去数月,微软与谷歌合作,将Edge的滚动优化代码提交到开源...