原生js实现自定义滚动条


Posted in Javascript onJanuary 20, 2021

本文实例为大家分享了js实现自定义滚动条的具体代码,供大家参考,具体内容如下

1.HTML文件

div1是滚动条,div2是滚动小球,div3是文本区域容器,div4是文本区域。

<div id="div">
 <div id="div1">
 <div id="div2"> </div>
 </div>
 <div id="div3">
 <div id="div4">
 <p>CSS3 教程</p>
 <p>CSS3 教程</p>
 <p>CSS3 简介</p>
 <p>CSS3 边框</p>
 <p>CSS3 圆角</p>
 <p>CSS3 背景</p>
 <p>CSS3 渐变</p>
 <p>CSS3 文本效果</p>
 <p>CSS3 字体</p>
 <p>CSS3 2D 转换</p>
 <p>CSS3 3D 转换</p>
 <p>CSS3 过渡</p>
 <p>CSS3 动画</p>
 <p>CSS3 多列</p>
 <p>CSS3 用户界面</p>
 <p>CSS3 图片</p>
 <p>CSS3 按钮</p>
 <p>CSS3 分页</p>
 <p>CSS3 框大小</p>
 <p>CSS3 弹性盒子</p>
 <p>CSS3 多媒体查询</p>
 <p>CSS3 多媒体查询实例</p>
 </div>
 </div>
</div>

2.css样式文件

通过容器溢出隐藏,文本区域的绝对定位,然后再交给js处理。

*{padding: 0; margin: 0;}
#div{top:200px;left:25%;width: 50%;height: 300px; position: absolute; 
}
#div1{width: 20px; height: 300px; position: relative; 
background: #CCCCCC; border-radius: 28px; float: right; cursor: pointer;}
#div1 #div2{left: -4px;width: 28px;height: 28px;border-radius: 50%; background: red;
position: absolute;}

#div3{width: 90%; height: 300px; border: 2px solid #CCCCCC;
position: relative; float: left; overflow: hidden;}
#div3 #div4{top:0;left:0;width: 100%; position: absolute; font-family: "微软雅黑";
font-size: 19px; letter-spacing: 1px; padding: 3px 6px;}

3.js脚本代码

window.onload =function(){
 var allDiv =document.getElementById('div');
 var oDiv =document.getElementById('div2');
 var aDiv =document.getElementById('div1');
 var textDiv1 =document.getElementById('div3');
 var textDiv2 =document.getElementById('div4');
 
 // 进度条拖动,内容跟着运动事件
 oDiv.onmousedown =function(ev){
 var oEvent =ev||event;
 
 var disY =oEvent.clientY -oDiv.offsetTop;
 
 if(oDiv.setCapture){
 oDiv.onmousemove =mouseMove;
 oDiv.onmouseup =mouseUp;
 
 oDiv.setCapture();
 }else{
 document.onmousemove =mouseMove;
 document.onmouseup =mouseUp;
 }
 
 function mouseMove(ev){
 var oEvent =ev||event; 
 var t =oEvent.clientY -disY; 
 var bottomLine = aDiv.offsetHeight-oDiv.offsetHeight; 
 
 
 if(t <0){
 t =0;
 }else if(t >bottomLine){
 t =bottomLine;
 }
 
  var percent =t/272;
  
 oDiv.style.top =t+'px';
 textDiv2.style.top =-(textDiv2.offsetHeight-textDiv1.offsetHeight)*percent+'px';
 
 };
 
 function mouseUp(){
 this.onmousemove =null;
 this.onmouseup =null;
 
 if(oDiv.releaseCapture){
 oDiv.releaseCapture();
 }
 };
 
 return false;
 };
 
 // 点击进度条,开启定时器,小球做匀速运动到达后,清楚定时器
 aDiv.onmousedown=function(ev){
 var oEvent =ev||event; 
 var divY =oEvent.clientY-allDiv.offsetTop;
 var timer =null;var speed=10;
 
 
 clearInterval(timer)
 timer = setInterval(function(){
 var percent=oDiv.offsetTop/272;
 
 
 if(oDiv.offsetTop<divY-28){
 oDiv.style.top =oDiv.offsetTop + speed +'px';
 textDiv2.style.top =-(textDiv2.offsetHeight-textDiv1.offsetHeight)*percent +'px';
 }else if(oDiv.offsetTop>divY){
 oDiv.style.top =oDiv.offsetTop - speed +'px';
 textDiv2.style.top =-(textDiv2.offsetHeight-textDiv1.offsetHeight)*percent +'px';
 }else if(oDiv.offsetTop>260){
 oDiv.offsetTop = 272+'px';
 clearInterval(timer);
 }else if(oDiv.offsetTop<10){
 oDiv.offsetTop = 0+'px';
 clearInterval(timer);
 }else{
 clearInterval(timer);
 }
 
 
 },10);
 
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
(function(){})()的用法与优点
Mar 11 Javascript
重载toString实现JS HashMap分析
Mar 13 Javascript
实现web打印的各种方法介绍及实现代码
Jan 09 Javascript
extjs3 combobox取value和text案例详解
Feb 06 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
Dec 19 Javascript
js实现日历与定时器
Feb 22 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 Javascript
JavaScript 基础表单验证示例(纯Js实现)
Jul 20 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
Sep 18 Javascript
node.JS二进制操作模块buffer对象使用方法详解
Feb 06 Javascript
vue 修改 data 数据问题并实时显示操作
Sep 07 Javascript
uniapp微信小程序:key失效的解决方法
Jan 20 #Javascript
JavaScript实现下拉列表
Jan 20 #Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 #Vue.js
详解实现vue的数据响应式原理
Jan 20 #Vue.js
vue实现简易计算器功能
Jan 20 #Vue.js
vue使用过滤器格式化日期
Jan 20 #Vue.js
Vue实现简单计算器
Jan 20 #Vue.js
You might like
使用dump函数,给php加断点测试
2013/06/25 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
jquery的ajax请求全面了解
2013/03/20 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
JavaScript—window对象使用示例
2013/12/09 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
js实现数组转换成json
2015/06/26 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
基于vue配置axios的方法步骤
2017/11/09 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
Python imread、newaxis用法详解
2019/11/04 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
python实现梯度法 python最速下降法
2020/03/24 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
软件工程师面试题
2012/06/25 面试题
医院保洁服务方案
2014/06/11 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
家长通知书家长意见
2014/12/30 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS