原生js封装自定义滚动条


Posted in Javascript onMarch 24, 2017

最近有一个关于制作在线音乐播放器的项目,需要使用一个滚动条,但是自带滚动条实在是太丑了,所以就自己琢磨了一下自定义的滚动条。

在网上看原理,说实话没怎么看懂,就趁今天上午上安卓的时候,研究了一下,结果还算是满意吧。然后就包装一个对象。

使用方法很简单,就是自定义一个div,将这个对象导入做参数,new一下就可以。也可以自己定义滚动条的样式,只要自己修改一下样式表就可以

效果图:

原生js封装自定义滚动条

代码如下:

<!doctype html> 
<html> 
<head> 
 <meta charset="utf-8"> 
 <title></title> 
</head>
<style type="text/css">
div{
 padding:0px;
 box-sizing:border-box;
 margin:0px;
 border:0px;
}
#div-5{
 width: 700px;
 height: 500px;
 border:1px solid black;
 position: relative;
 overflow: hidden;
}
.ribbit-OF-div1{
 width: 20px;
 background-color: rgb(239, 238, 238);
 border:1px solid rgba(0,0,0,0.5);
 position: absolute;
 right:0px;
 top: 0px;
 cursor:default;
}
.ribbit-OF-div2{
 position: absolute;
 top:0px;
 right: 0px;
 width: 100%;
 height: 100px;
 background-color:rgba(0,0,0,0.3);
 border-radius: 10px;
}
.ribbit-OF-div3{
 width: 100%;
 height:auto;
 background-color: lime;
}
</style>
<body>
<div id="div-1">
<div id="div-2">

</div> 
</div>
<div id="div-3"><div id="div-4"></div></div>
<div id="div-5">
  123123<br/>
qwe<br/>
12asd23<br/>
asd3123<br/>
qwe123<br/>
235423423<br/>
azxc123<br/>
123123<br/>
qwe<br/>
12asd23<br/>
asd3123<br/>
qwe123<br/>
235423423<br/>
azxc123<br/>
123123<br/>
qwe<br/>
12asd23<br/>
asd3123<br/>
qwe123<br/>
235423423<br/>
azxc123<br/>
123123<br/>
qwe<br/>
12asd23<br/>
asd3123<br/>
qwe123<br/>
235423423<br/>
azxc123<br/>
123123<br/>
qwe<br/>
12asd23<br/>
asd3123<br/>
qwe123<br/>
235423423<br/>
azxc123<br/>
123123<br/>
qwe<br/>
12asd23<br/>
asd3123<br/>
qwe123<br/>
235423423<br/>
azxc123<br/>123123<br/>
qwe<br/>
12asd23<br/>
asd3123<br/>
qwe123<br/>
235423423<br/>
azxc123<br/>
123123<br/>
qwe<br/>
12asd23<br/>
asd3123<br/>
qwe123<br/>
235423423<br/>
azxc123<br/>
123123<br/>
qwe<br/>
12asd23<br/>
asd3123<br/>
qwe123<br/>
235423423<br/>
azxc123<br/>
</div>
</body>
<script type="text/javascript">
var div_5 = document.getElementById('div-5');
function OverFlow(element){
 this.element = element;
 this.ribbit_OF_div1 = document.createElement("div");
 this.ribbit_OF_div2 = document.createElement("div");
 this.ribbit_OF_div3 = document.createElement("div");
 this.createDiv = function(){
  this.ribbit_OF_div1.className = "ribbit-OF-div1";
  this.ribbit_OF_div2.className = "ribbit-OF-div2";
  this.ribbit_OF_div3.className = "ribbit-OF-div3";
  this.ribbit_OF_div3.innerHTML = this.element.innerHTML;
  this.element.innerHTML="";
  this.element.appendChild(this.ribbit_OF_div3);
  this.ribbit_OF_div1.appendChild(this.ribbit_OF_div2);
  document.body.appendChild(this.ribbit_OF_div1);
  this.ribbit_OF_div1.style.height = getComputedStyle(this.element,null).height;
  this.ribbit_OF_div1.style.left = (this.element.offsetLeft+(parseInt(getComputedStyle(this.element,null).width)-parseInt(getComputedStyle(this.ribbit_OF_div1,null).width)))+"px";
  this.ribbit_OF_div1.style.top = this.element.offsetTop+"px";
  this.ribbit_OF_div2.style.top = "0px";
 }
 this.addAudo=function(){
  var YY=null;//前鼠标位置
  var topXX = 0;//前top位置
  var topX = 0;//后top值
  var vherght = parseInt(getComputedStyle(this.ribbit_OF_div3,null).height)-parseInt(getComputedStyle(this.element,null).height);//可移动
  var dst = 0;
  //最大top移动位置
  var top_x = parseInt(getComputedStyle(this.ribbit_OF_div1,null).height)-parseInt(getComputedStyle(this.ribbit_OF_div2,null).height);
  var thio = this;
  window.onmousemove = function(e){
   fun(e.clientY);
  };
  this.ribbit_OF_div2.onmousedown=function(e){
   YY = e.clientY;
   topXX =parseInt(this.style.top);
   return false;
  }
  window.onmouseup=function(){
   YY = null;
   return true;
  }
  function fun(y){
   if(top_x>=topX&&topX>=0&&YY!=null){
    topX = y-YY+topXX;
    if(topX<0)topX=0;
    if(topX>top_x)topX=top_x-1;
    thio.ribbit_OF_div2.style.top = (topX-1)+"px";
    dst = topX*vherght/top_x;
    thio.element.scrollTop = dst;
   }
  }
 }
 this.createDiv();
 this.addAudo();
}
new OverFlow(div_5);
</script>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JS获取URL中参数值(QueryString)的4种方法分享
Apr 12 Javascript
javascript引用赋值(地址传值)用法实例
Jan 13 Javascript
js实现TAB切换对应不同颜色的代码
Aug 31 Javascript
程序员必知35个jQuery 代码片段
Nov 05 Javascript
12种JavaScript常用的MVC框架比较分析
Nov 16 Javascript
javascript中sort排序实例详解
Jul 24 Javascript
详解Jquery的事件操作和文档操作
Dec 19 Javascript
详解使用fetch发送post请求时的参数处理
Apr 05 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
May 08 jQuery
详解JQuery基础动画操作
Apr 12 jQuery
关于layui 下拉列表的change事件详解
Sep 20 Javascript
Node绑定全局TraceID的实现方法
Nov 14 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
Mar 24 #Javascript
jQuery实现鼠标经过显示动画边框特效
Mar 24 #jQuery
JS得到当前时间的方法示例
Mar 24 #Javascript
HTML5+jQuery实现搜索智能匹配功能
Mar 24 #jQuery
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
Mar 24 #jQuery
原生js实现简单的Ripple按钮实例代码
Mar 24 #Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 #jQuery
You might like
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
物业管理毕业生个人的求职信
2013/11/30 职场文书
会计出纳岗位职责
2013/12/25 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
篝火晚会主持词
2014/03/25 职场文书
英文产品推荐信
2015/03/27 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
Vue实现下拉加载更多
2021/05/09 Vue.js
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
python 离散点图画法的实现
2022/04/01 Python