js在自己给定的大框里实现拖拽
2018-03-11 10:54
225 查看
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style lang=""> * { margin: 0; padding: 0; } #div1 { width: 40px; height: 40px; background: blue; position:absolute; left: 450px; top: 200px; } #div2 { width: 600px; height: 400px; background: #f0f0f0; position: relative; margin: 50px auto 0; } </style></head><body> <div id="div2"> <div id="div1"></div> </div> <script> var oDiv=document.getElementById('div1'); var sh=false var offsetLeftIn var offsetTopIn document.onmousemove = function(ev){ if(sh){ var curLeft var curTop curLeft =(ev.clientX-offsetLeftIn)>0?ev.clientX-offsetLeftIn:0 curLeft =(curLeft)<(oDiv.parentNode.offsetWidth-oDiv.offsetWidth)?(curLeft):(oDiv.parentNode.offsetWidth-oDiv.offsetWidth); // if(curLeft>window.innerWidth-2*oDiv.offsetWidth){ // curLeft=window.innerWidth-oDiv.offsetWidth; // } // curLeft=offsetLeftIn; oDiv.style.left =curLeft+'px'; // console.log(oDiv.style.left) curTop =(ev.clientY-offsetTopIn)>0?(ev.clientY-offsetTopIn):0 curTop =(curTop)<(oDiv.parentNode.offsetHeight-oDiv.offsetWidth)?(curTop):(oDiv.parentNode.offsetHeight-oDiv.offsetWidth) console.log(curTop) oDiv.style.top=curTop+'px'; } } oDiv.onmousedown=function(ev){
a131
// console.log(oDiv.offsetLeft) // console.log(ev.clientX) offsetLeftIn=ev.clientX-oDiv.offsetLeft//是在小滑块里的偏移量+大框在Body里的偏移量 offsetTopIn=ev.clientY-oDiv.offsetTop console.log(offsetTopIn) sh=true } document.onmouseup=function(ev){ sh=false } </script></body></html>
首先每次拖拽都是一个按下动作接着很多移动的动作的过程,按下时就确定了光标在滑块里的偏移量。以后怎么移动这个值都不变。但要注意ev.clientX是在body下的偏移量,而oDiv.offsetLeft则是滑块在大框里的偏移量,所以ev.clientX-oDiv.offsetLeft
得到的是在小滑块里的偏移量加大框在body里的偏移量。把这个量记为offsetLeftIn
然后根据这个恒等式:
offsetLeftIn+当前的滑块在外框偏移量=当前光标在body里的偏移量
就可以求出当前的滑块在外框偏移量
然后把oDiv.style.left设置成这个值即可。
这个可以用来做音量调节的那种效果,只需要把外框和滑块的大小调节合适即可。
a131
// console.log(oDiv.offsetLeft) // console.log(ev.clientX) offsetLeftIn=ev.clientX-oDiv.offsetLeft//是在小滑块里的偏移量+大框在Body里的偏移量 offsetTopIn=ev.clientY-oDiv.offsetTop console.log(offsetTopIn) sh=true } document.onmouseup=function(ev){ sh=false } </script></body></html>
首先每次拖拽都是一个按下动作接着很多移动的动作的过程,按下时就确定了光标在滑块里的偏移量。以后怎么移动这个值都不变。但要注意ev.clientX是在body下的偏移量,而oDiv.offsetLeft则是滑块在大框里的偏移量,所以ev.clientX-oDiv.offsetLeft
得到的是在小滑块里的偏移量加大框在body里的偏移量。把这个量记为offsetLeftIn
然后根据这个恒等式:
offsetLeftIn+当前的滑块在外框偏移量=当前光标在body里的偏移量
就可以求出当前的滑块在外框偏移量
然后把oDiv.style.left设置成这个值即可。
这个可以用来做音量调节的那种效果,只需要把外框和滑块的大小调节合适即可。
相关文章推荐
- 怎么样把百度搜索引入自己的网站JS实现(附源代码)
- 【C语言】自己编写程序实现strrchr函数,即在给定字符串中找特定的字符并返回最后出现的位置
- JS实现表格一列宽度拖拽
- JS实现的文件拖拽上传功能示例
- js实现可拖拽的div
- JQuery实现个性化,可以拖拽 自定义自己的界面(四)
- js实现控制文件拖拽并获取拖拽内容功能
- js实现拖拽功能
- angularjs + jquery 实现拖拽碰撞 angularjs-jquery-Grid-Layout
- js实现可拖拽的div
- 拖拽自动生成的DataGridView和BindingSource操作数据库(增加,修改,删除)---自己实现
- js实现控件的拖拽功能
- js实现对节点的拖拽
- js实现鼠标拖拽多选功能示例
- JS实现拖拽
- js 实现 弹出层居中,并且层可以拖拽
- JS利用 Sea.js 实现模块化:拖拽、缩放及范围限制
- JS拖拽的进一步练习,移动与拉伸实现代码
- js实现拖拽效果(构造函数)
- 简单实现js拖拽效果