• css和js实现硬件加速渲染自定义滚动条


    听别人说用CSS的变换来实现渲染有硬件加速的效果,看到很多大网站都开始陆续使用上了,我也来说说怎么做,我这边实现的滚动条有自然滚动效果,看起来比较自然,说的再多不如直接写,让我们开始吧!

    我们需要自己定义页面滚动的话,我们肯定不想让浏览器自带的滚动条出现,所以我们要先隐藏页面所有的滚动条,下面的CSS样式是兼容各个浏览器的隐藏滚动条

    *::-webkit-scrollbar {
           0 !important
        }
    
        /* IE 10+ */
        * {
          -ms-overflow-style: none;
        }
    
        /* Firefox */
        * {
          overflow: -moz-scrollbars-none;
        }
    

    滚动条隐藏起来了,我们下一步需要做的就是写页面代码

    <div class="scrollBox">
        <div class="scrollContent">
          <!-- 你的内容 -->
    
    
          
          <!-- 内容结束 -->
        </div>
      </div>
    

    后面继续写对应的css样式

        .scrollBox {
          position: fixed;
          left: 0;
          top: 0;
           100vw;
          height: 100vh;
          overflow: hidden;
        }
    
        .scrollContent {
          transform: translate3d(0, 0px, 0);
          transition: all ease-out 0.6s;
        }
    

    写完后我们开始写js逻辑

    let mousetop = 0;
    
        const my_mousewheel = (e) => {
    
          if ((mousetop + e.deltaY) < -1 || (mousetop + e.deltaY) > (document.querySelector(".scrollBox").scrollHeight - document.querySelector(".scrollBox").offsetHeight + 1)) {
            //这里初略判断滚动是否到顶部或者到底部
            if ((mousetop + e.deltaY) < -1 && mousetop >= 1) {
              //二次判断是否真到顶部
              mousetop = 0;
              document.querySelector(".scrollContent").style.removeProperty("transform");
              return;
            }
    
            if ((mousetop + e.deltaY) > (document.querySelector(".scrollBox").scrollHeight - document.querySelector(".scrollBox").offsetHeight + 1) && mousetop <= (document.querySelector(".scrollBox").scrollHeight- document.querySelector(".scrollBox").offsetHeight) - 1) {
              //二次判断是否真到底部
              mousetop = document.querySelector(".scrollBox").scrollHeight - document.querySelector(".scrollBox").offsetHeight;
              document.querySelector(".scrollContent").style.cssText = `transform: translate3d(0,-${mousetop}px,0);`;
              return;
            }
            return;
          }
    
          mousetop += e.deltaY;
          document.querySelector(".scrollContent").style.cssText = `transform: translate3d(0,-${mousetop}px,0);`;
        }
    
        document.querySelector(".scrollBox").onmousewheel = my_mousewheel;
    

    最后到了附上源码

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>css和js实现硬件加速渲染自定义滚动条</title>
      <style>
        *::-webkit-scrollbar {
           0 !important
        }
    
        /* IE 10+ */
        * {
          -ms-overflow-style: none;
        }
    
        /* Firefox */
        * {
          overflow: -moz-scrollbars-none;
        }
    
        html,
        body {
          margin: 0;
          padding: 0;
          font-size: 100px;
          background: #fff;
        }
    
        a {
          text-decoration: none;
          text-decoration-color: #000;
          color: #000;
        }
    
        li {
          list-style: none;
        }
    
        .scrollBox {
          position: fixed;
          left: 0;
          top: 0;
           100vw;
          height: 100vh;
          overflow: hidden;
        }
    
        .scrollContent {
          transform: translate3d(0, 0px, 0);
          transition: all ease-out 0.6s;
        }
      </style>
    </head>
    
    <body>
      <div class="scrollBox">
        <div class="scrollContent">
          <!-- 你的内容 -->
    
    
          
          <!-- 内容结束 -->
        </div>
      </div>
      <script>
        let mousetop = 0;
    
        const my_mousewheel = (e) => {
    
          if ((mousetop + e.deltaY) < -1 || (mousetop + e.deltaY) > (document.querySelector(".scrollBox").scrollHeight - document.querySelector(".scrollBox").offsetHeight + 1)) {
            //这里初略判断滚动是否到顶部或者到底部
            if ((mousetop + e.deltaY) < -1 && mousetop >= 1) {
              //二次判断是否真到顶部
              mousetop = 0;
              document.querySelector(".scrollContent").style.removeProperty("transform");
              return;
            }
    
            if ((mousetop + e.deltaY) > (document.querySelector(".scrollBox").scrollHeight - document.querySelector(".scrollBox").offsetHeight + 1) && mousetop <= (document.querySelector(".scrollBox").scrollHeight- document.querySelector(".scrollBox").offsetHeight) - 1) {
              //二次判断是否真到底部
              mousetop = document.querySelector(".scrollBox").scrollHeight - document.querySelector(".scrollBox").offsetHeight;
              document.querySelector(".scrollContent").style.cssText = `transform: translate3d(0,-${mousetop}px,0);`;
              return;
            }
            return;
          }
    
          mousetop += e.deltaY;
          document.querySelector(".scrollContent").style.cssText = `transform: translate3d(0,-${mousetop}px,0);`;
        }
    
        document.querySelector(".scrollBox").onmousewheel = my_mousewheel;
      </script>
    </body>
    
    </html>
    

    教程到此结束,希望可以帮到你们

  • 相关阅读:
    每日随笔
    每日随笔
    每日随笔
    JavaSE 类加载机制
    MySQL 索引
    JavaSE 线程的生命周期
    JVM堆内存(heap)详解
    Redis 学习笔记(三)哨兵模式配置高可用和集群
    sqlserver数据库连接数相关问题
    多项式多点求值
  • 原文地址:https://www.cnblogs.com/LRolinx/p/13856570.html
Copyright © 2020-2023  润新知