css和js实现硬件加速渲染自定义滚动条
听别人说用CSS的变换来实现渲染有硬件加速的效果,看到很多大网站都开始陆续使用上了,我也来说说怎么做,我这边实现的滚动条有自然滚动效果,看起来比较自然,说的再多不如直接写,让我们开始吧!
我们需要自己定义页面滚动的话,我们肯定不想让浏览器自带的滚动条出现,所以我们要先隐藏页面所有的滚动条,下面的CSS样式是兼容各个浏览器的隐藏滚动条
*::-webkit-scrollbar {
      width: 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;
      width: 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 {
      width: 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;
      width: 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>
教程到此结束,希望可以帮到你们
css和js实现硬件加速渲染自定义滚动条的更多相关文章
- Chromium硬件加速渲染的UI合成过程分析
		在Chromium中.Render端和WebGL端绘制出来的UI终于是通过Browser端显示在屏幕上的.换句话说.就是Browser端负责合成Render端和WebGL端的UI.这涉及到不同Open ... 
- CSS动画原理及硬件加速
		一.图层 图层即层叠上下文,具体概念和应用大家可以看我之前转自张鑫旭大神博客的<CSS层叠上下文和层叠顺序>,这里我们简单复习一下产生层叠上下文的原因. 1.根层叠上下文 指的是页面根元素 ... 
- 模仿yui将css和js打包,加速网页速度
		如果你有机会用firebug看看自己网站的网络请求,你会发现请求数量之多超乎你的想象.为减少这个数量,有许多技术方案.比如yui的combo,会将所有需要的js混合成一个文件下载,现代web服务器好像 ... 
- js拖拽案例、自定义滚动条
		简单实例: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ... 
- css实现硬件加速
		原文请点击一下链接: http://blog.teamtreehouse.com/increase-your-sites-performance-with-hardware-accelerated-c ... 
- CSS开启硬件加速 hardware accelerated
		作者:孙志勇 微博 日期:2016年12月6日 一.时效性 所有信息都具有时效性.文章的价值,往往跟时间有很大关联.特别是技术类文章,请注意本文创建时间,如果本文过于久远,请读者酌情考量,莫要浪费时间 ... 
- 后端自动构建前端css和js
		引子: 别的复杂前端开发技术不会,用得多的还是手写代码,手动处理. 3年前手写合并压缩js和css文件的asp脚本代码目前还能正常运行,也就没有多大使用别的技术的动力. 直到近期被一个问题纠结着,今天 ... 
- 今天写了一个SSM小项目,运行之后,前端页面的CSS、js样式显示不出来,具体操作如下:
		因为SSM中我们设置了拦截器,拦截器会拦截CSS和JS,所有样式渲染不出来,在Web.xml中写上 1 <servlet-mapping> 2 <servlet-name>de ... 
- 使用CSS3开启GPU硬件加速提升网站动画渲染性能
		遇到的问题: 网站本身设计初衷就没有打算支持IE8及以下版本浏览器,并不是因为代码兼容性问题,而是真的不想迁就那些懒得更新自己操作系统和浏览器的用户,毕竟是我自己的网站,所以我说了算!哈哈~ 没有了低 ... 
随机推荐
- 学习 | iscroll之上拉加载下拉刷新
			引入文件顺序 1.zepto 2.iscroll.js 3.scroll-probe.js 链接 完整代码:https://github.com/dirkhe1051931999/writeBlog/ ... 
- JVM运行时数据区--本地方法栈
			本地方法栈 1.Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法(一般非Java实现的方法)的调用 2.本地方法栈,也是线程私有的. 3.允许被实现成固定或者是可动态拓展的内存 ... 
- u深度win10pe装机版制作教程
			一款功能强大的u盘启动盘要怎么制作是非常重要的,对于大多数用户来说其中操作步骤并不熟悉.这里小编带来时下最新的u深度win10pe装机版制作教程,教你如何快速的进行u深度U盘的制作,下面就跟小编一起进 ... 
- k8s&docker面试总结
			花了大半个月对k8s&docker进行了梳理,包括之前读过的书,官方文档以及k&d在公司项目的实践等. 以下是个人对docker & k8s 面试知识点的总结: 1 docke ... 
- python-面向过程面向对象和栈的实现
			0x01 大纲 面向过程 函数 参数传递 返回 面向对象 类 栈的数据结构实现 0x02 例子 def add(a,b): return a+b if __name__ == '__main__': ... 
- JVM 的参数类型
			标配参数 -version -help X 参数 -Xint:解释执行 -Xcomp:第一次使用就编译成本地代码 -Xmixed:混合模式 XX 参数 Boolean 类型:-XX:+ 或者 - 某个 ... 
- xss利用——BeEF#stage2(初始并持续化控制)
			全文概览 浏览器攻击方法流程 攻击浏览器一般分为几个阶段,如下图 整个过程分为三个步骤,第一步是初始化控制,第二步是持续控制,第三步是攻击.在第三步中的七个攻击方法是可以交叉的,比如可以同时攻击用户和 ... 
- Windows控件的属性与事件
			Treeview控件重要属性和事件 属性 说明 Nodes Treeview控件中所有树节点 SelectdNode 当前Treeview控件中选定的树节点,如果当前没有选定树节点,返回值为null ... 
- 多线程之ReentrantLock篇(五)
			昨天有说过后面讲ReentrantLock,今天我们这篇幅就全局的讲解下,我们在Lock出来前,解决并发问题没得选只能用Synchronized. 一.ReentrantLock PK synchro ... 
- 《RESTful Web APIs》书中有一段POST API示例,现实中我们如何测试这个示例?书中没有说,Let's try it!
			<RESTful Web APIs>书中有一段POST API示例: I then send the filled-out template as part of an HTTP POST ... 
