自定义滚动条
2016-06-19 14:50
357 查看
这个和拖拽元素的原理一样,只是把拖拽范围限制在一个制定的父级内,就变成了滚动条。然后再获取出滑动系数,就可以通过滚动条控制其它元素的变化了.
例子:
HTML代码:
CSS代码:
JS代码:
例子:
HTML代码:
<label for="">横滚动条:<input type="text" id="text1" /></label> <label for="">竖滚动条:<input type="text" id="text2" /></label> <div id="div1"> <div id="div2"></div> </div> <div id="div3"> <div id="div4"></div> </div>
CSS代码:
*{margin:0;padding:0;} #div1{width:500px;height: 30px;position: relative;margin:10px auto;background: #eeeeee;} #div2{width:30px;height: 30px;position: absolute;left: 0;top:0;background: red;} #div2:hover{background: orangered;} #div3{width:30px;height: 500px;position: relative;left:290px;top:-39px;background: #eeeeee;} #div4{width:30px;height: 30px;position: absolute;left: 0;top:0;background: red;} #div4:hover{background: orangered;}
JS代码:
window.onload = function () { var oDiv1 = document.getElementById('div1'); var oDiv2 = document.getElementById('div2'); var oDiv3 = document.getElementById('div3'); var oDiv4 = document.getElementById('div4'); var oText1 = document.getElementById('text1'); var oText2 = document.getElementById('text2'); oDiv2.onmousedown = function (ev) { scroll(this,oDiv1,ev, function (scale) { oText1.value = scale; }); return false; }; oDiv4.onmousedown = function (ev) { scroll(this,oDiv3,ev, function (scale) { oText2.value = scale; }); return false; } }; //滚动条函数,最后一个fun函数是为了获取滚动条的滑动系数 function scroll(objSlid,objParent,ev,fun)//这个ev是obj的鼠标事件 { var pos = getPos(ev); var disX = pos.x - objSlid.offsetLeft; var disY = pos.y - objSlid.offsetTop; document.onmousemove = function (ev) //这个ev是document的鼠标事件 { var pos = getPos(ev); //获取鼠标位置 var l = pos.x - disX; //(l,t)是元素左上角的坐标 var t = pos.y - disY; //不让元素移出父级 if(l<0) l = 0; else if(l > objParent.offsetWidth - objSlid.offsetWidth) l = objParent.offsetWidth - objSlid.offsetWidth; if(t<0) t = 0; else if(t > objParent.offsetHeight - objSlid.offsetHeight) t = objParent.offsetHeight - objSlid.offsetHeight; //移动元素 objSlid.style.left = l + 'px'; objSlid.style.top = t + 'px'; var scale = 0; if(objSlid.offsetHeight == objParent.offsetHeight) //横滚动条 scale = (1/(objParent.offsetWidth - objSlid.offsetWidth))*l; else //竖滚动条 scale = (1/(objParent.offsetHeight - objSlid.offsetHeight))*t; if(fun) fun(scale); //把滑动系数传进去 }; document.onmouseup = function () { document.onmousemove = null; //停止移动 document.onmouseup = null; //不需要的函数赋值为null if(objSlid.releaseCapture) //解锁 objSlid.releaseCapture(); }; if(objSlid.setCapture) //让所有的事件响应都锁定到obj上 objSlid.setCapture(); } //获取位置 function getPos(ev) { var oEvent = ev||event; //兼容事件 //如果有滑动条的话,要加上滑了的位置,因为oEvent.clientX是可视区的坐标. var scrollTop = document.documentElement.scrollTop||document.body.scrollTop; var scrollLeft = document.documentElement.scrollLeft||document.body.scrollLeft; return {x:oEvent.clientX + scrollLeft,y:oEvent.clientY + scrollTop};//返回一个JSON数组 }
相关文章推荐
- iOS面试题整理(上) 仔细研读受益匪浅
- struts2自成定义校验器的使用
- 6-2CSS样式的优势
- Android入门——Fragment详解之Fragment与Activity通信及数据交换(二)
- poj 2255 Tree Recovery 分治
- 34、JavaScript中事件中的this
- C++实现12时制时钟
- hiho-102周 搜索五·数独
- Android 进程间通信
- 构造方法__construct()与析构方法__destruct()
- MyEclipse添加Maven插件
- 翻转课堂心得
- 字符串当引号遇到美元
- QT自绘标题和边框
- 6-1认识CSS样式
- 《HTML5移动开发指南》——笔记4(离线应用)
- Jimoshi_用easyui做Struts2+Hibenate4学生实体类(Student)的增删改
- 广度优先搜索-抓住那头牛(算法基础 第8周)
- 特殊的引用”$this“的使用
- winform chart 控件之滚动条的放大与缩小功能