原生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 相关文章推荐
raphael.js绘制中国地图 地图绘制方法
Feb 12 Javascript
jquery禁用右键示例
Apr 28 Javascript
jquery动态添加元素事件失效问题解决方法
May 23 Javascript
jQuery 插件开发指南
Nov 14 Javascript
分享一个常用的javascript静态类
Dec 31 Javascript
js获取字符串字节数方法小结
Jun 09 Javascript
jquery实现select选择框内容左右移动代码分享
Nov 21 Javascript
表单中单选框添加选项和移除选项
Jul 04 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
Apr 10 jQuery
解决Layui中layer报错的问题
Sep 03 Javascript
javascript实现倒计时效果
Feb 17 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
Jun 14 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
PHP实现下载断点续传的方法
2014/11/12 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
基于数据归一化以及Python实现方式
2018/07/11 Python
Python双向循环链表实现方法分析
2018/07/30 Python
python调用支付宝支付接口流程
2019/08/15 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
会计系毕业个人自荐信格式
2013/09/23 职场文书
高三生物教学反思
2014/01/25 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
医院义诊活动总结
2014/07/04 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python