原生js实现自定义滚动条

2022-07-25,,

本文实例为大家分享了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);
 
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

《原生js实现自定义滚动条.doc》

下载本文的Word格式文档,以方便收藏与打印。