原生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取得iframe下内容的方法
Nov 18 Javascript
javascript简单性能问题及学习笔记
Feb 04 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
Jun 06 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
基于JavaScript代码实现微信扫一扫下载APP
Dec 30 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
Jun 30 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
JS实现购物车特效
Feb 02 Javascript
angularjs实现柱状图动态加载的示例
Dec 11 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 Javascript
vue的路由映射问题及解决方案
Oct 14 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
Nov 04 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
php模板之Phpbean的目录结构
2008/01/10 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
Vue实现todolist删除功能
2018/06/26 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
使用python进行广告点击率的预测的实现
2019/07/04 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
python opencv实现简易画图板
2020/08/27 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
高级文秘工作总结的自我评价
2013/09/28 职场文书
厨房工作人员岗位职责
2013/11/15 职场文书
妇产医师自荐信
2014/01/29 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
超市督导岗位职责
2015/04/10 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL