原生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方法+js一般方法+js面向对象方法实现拖拽效果
Aug 30 Javascript
图片翻转效果具体实现代码
Jan 09 Javascript
javascript进行四舍五入方法汇总
Dec 16 Javascript
JavaScript检测鼠标移动方向的方法
May 22 Javascript
全面解析Bootstrap排版使用方法(标题)
Nov 30 Javascript
Bootstrap入门书籍之(一)排版
Feb 17 Javascript
AngularJS监听路由的变化示例代码
Sep 23 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
深入浅析Vue.js计算属性和侦听器
May 05 Javascript
JS实现点击拉拽轮播图pc端移动端适配
Sep 05 Javascript
layer.open组件获取弹出层页面变量、函数的实例
Sep 25 Javascript
cypress测试本地web应用
Jun 01 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提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
DOM 事件流详解
2015/01/20 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
Python中splitlines()方法的使用简介
2015/05/20 Python
Python简单生成随机数的方法示例
2018/03/31 Python
python对日志进行处理的实例代码
2018/10/06 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
英国复古服装购物网站:Collectif
2019/10/30 全球购物
文员岗位职责
2013/11/09 职场文书
中国央视网签名寄语
2014/01/18 职场文书
网络教育自我鉴定
2014/02/04 职场文书
干部现实表现材料
2014/02/13 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
先进党支部申报材料
2014/12/24 职场文书
2015年电工工作总结
2015/04/10 职场文书
医院党建工作总结2015
2015/05/26 职场文书
南京大屠杀观后感
2015/06/02 职场文书
工商行政处罚决定书
2015/06/24 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS