zoukankan      html  css  js  c++  java
  • 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>
    

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

  • 相关阅读:
    Understanding Unix/Linux Programming-ls指令练习二
    Understanding Unix/Linux Programming-ls指令练习一
    Understanding Unix/Linux Programming-who指令练习
    复习自控有感——20160307
    根轨迹法的校正正目标、原理和方法
    Understanding Unix/Linux Programming-cp指令练习
    树莓派交叉编译环境在Linux下的建立
    Vue最全指令大集合————VUE
    JS实现动态瀑布流及放大切换图片效果(js案例)
    JS实现自动轮播图效果(js案例)
  • 原文地址:https://www.cnblogs.com/LRolinx/p/13856570.html
Copyright © 2011-2022 走看看