原生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 相关文章推荐
屏蔽script注入小例子
Nov 12 Javascript
在js文件中写el表达式取不到值的原因及解决方法
Dec 23 Javascript
js实现缓冲运动效果的方法
Apr 10 Javascript
解决JavaScript数字精度丢失问题的方法
Dec 03 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
讲解vue-router之什么是嵌套路由
May 28 Javascript
vue2.0的虚拟DOM渲染思路分析
Aug 09 Javascript
vue中v-for循环给标签属性赋值的方法
Oct 18 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
Dec 12 Javascript
在vscode 中设置 vue模板内容的方法
Sep 02 Javascript
原生JS实现pc端轮播图效果
Dec 21 Javascript
深入浅析React中diff算法
May 19 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
PHP令牌 Token改进版
2008/07/18 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
php创建图像具体步骤
2017/03/13 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
深入理解vue Render函数
2017/07/19 Javascript
详解基于webpack&amp;gettext的前端多语言方案
2019/01/29 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
python赋值操作方法分享
2013/03/23 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
Python学生信息管理系统修改版
2018/03/13 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
Python常用的json标准库
2019/02/19 Python
Python实现代码统计工具
2019/09/19 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
巴西购物网站:Onofre Agora
2020/06/08 全球购物
理货员的岗位职责
2013/11/23 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
《中华少年》教学反思
2014/02/15 职场文书
党组织公开承诺书
2014/03/29 职场文书
大学班级计划书
2014/04/29 职场文书
志愿者个人总结
2015/03/03 职场文书
趣味运动会广播稿
2015/08/19 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技
golang的文件创建及读写操作
2022/04/14 Golang