原生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 cookie插件代码类
May 26 Javascript
基于jquery的放大镜效果
May 30 Javascript
jquery触发a标签跳转事件示例代码
Jul 21 Javascript
js window.print实现打印特定控件或内容
Sep 16 Javascript
node.js中的fs.chown方法使用说明
Dec 16 Javascript
jQuery实现的Div窗口震动效果实例
Aug 07 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
Jan 04 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
Nov 01 Javascript
JavaScript 点击触发复制功能实例详解
Nov 02 Javascript
Vue中的methods、watch、computed的区别
Nov 26 Javascript
setTimeout与setInterval的区别浅析
Mar 23 Javascript
React实现类似淘宝tab居中切换效果的示例代码
Jun 02 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 单引号与双引号的区别
2009/11/24 PHP
php解析url的三个示例
2014/01/20 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
JavaScript版代码高亮
2006/06/26 Javascript
javascript new后的constructor属性
2010/08/05 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
使用js画图之饼图
2015/01/12 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
Textarea输入字数限制实例(兼容iOS&amp;安卓)
2017/07/06 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
vue实现轮播图帧率播放
2021/01/26 Vue.js
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
简单实现Python爬取网络图片
2018/04/01 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
拖鞋店创业计划书
2014/01/15 职场文书
市场安全管理制度
2014/01/26 职场文书
村班子对照检查材料
2014/08/18 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
学术会议通知范文
2015/04/15 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
餐厅开业活动方案
2019/07/08 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
java设计模式--原型模式详解
2021/07/21 Java/Android