原生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 相关文章推荐
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
Dec 11 Javascript
js 金额文本框实现代码
Feb 14 Javascript
使用jQuery避免鼠标双击的解决方案
Aug 21 Javascript
JQuery结合CSS操作打印样式的方法
Dec 24 Javascript
22点关于jquery性能优化的建议
May 28 Javascript
javascript实现浏览器窗口传递参数的方法
Sep 03 Javascript
Easyui Treegrid改变默认图标的方法
Apr 29 Javascript
JS实现弹出居中的模式窗口示例
Jun 20 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
Bootstrap Img 图片样式(推荐)
Dec 13 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
Apr 20 Javascript
Vue自定义指令使用方法详解
Aug 21 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
计数器详细设计
2006/10/09 PHP
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
python logging类库使用例子
2014/11/22 Python
python列出目录下指定文件与子目录的方法
2015/07/03 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
Python实现图片添加文字
2019/11/26 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
python和php哪个更适合写爬虫
2020/06/22 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
物流管理毕业生自荐信
2013/10/24 职场文书
司机辞职报告范文
2014/01/20 职场文书
安全生产专项整治方案
2014/05/06 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
立春观后感
2015/06/18 职场文书
聘任合同书
2015/09/21 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技
Golang解析JSON对象
2022/04/30 Golang