js学习笔记28----拖拽
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了js学习笔记28----拖拽,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3982字,纯文字阅读大概需要6分钟。
内容图文
![js学习笔记28----拖拽](/upload/InfoBanner/zyjiaocheng/1075/9b76ad7bb16f46649e8d1ace9ec0b5c6.jpg)
原理:先计算鼠标与拖拽目标的左侧距离 跟 上面距离,再计算拖动后的位置。
示例代码:
1 <! DOCTYPE html > 2 < html lang ="en" > 3 < head > 4 < title >拖拽原理</title> 5<meta charset="UTF-8"> 6<meta name="viewport" content="width=device-width, initial-scale=1"> 7<style type="text/css"> 8 #moveBlock{ 9 width:100px;height:100px;background-color:#f00;position:absolute 10}11</style>12<script>1314 window.onload =function(){ 15var oDiv = document.getElementById("moveBlock"); 16 oDiv.onmousedown =function(ev){ 17var ev = ev || event; 18var disX = ev.clientX -this.offsetLeft; //计算鼠标与当前div左侧距离19var disY = ev.clientY -this.offsetTop; //计算鼠标与当前div顶侧距离2021 document.onmousemove =function(ev){ 22var ev = ev || event; 23 oDiv.style.left = ev.clientX - disX +"px";//计算拖动后与左侧的距离24 oDiv.style.top = ev.clientY - disY +"px";//计算拖动后与顶部的距离25 } 2627 document.onmouseup =function(){ 28 document.onmousemove = document.onmouseup =null; 29 } 3031 } 32 } 3334</script>35</head>36<body>37<div id="moveBlock">3839</div>40</body>41</html>
我们运行上面的代码如果只是一个单纯的div没什么问题,但是如果同时有文字选中之后,再拖动div会发现有问题。
那是因为当鼠标按下的时候,如果页面中有文字被选中,那么会触发浏览器默认的文字拖拽效果。
1 <! DOCTYPE html > 2 < html lang ="en" > 3 < head > 4 < title >拖拽改进版</title> 5<meta charset="UTF-8"> 6<meta name="viewport" content="width=device-width, initial-scale=1"> 7<style type="text/css"> 8 #moveBlock{ 9 width:100px;height:100px;background-color:#f00;position:absolute 10}11</style>12<script>1314 window.onload =function(){ 15var oDiv = document.getElementById("moveBlock"); 16 oDiv.onmousedown =function(ev){ 17var ev = ev || event; 18var disX = ev.clientX -this.offsetLeft; 19var disY = ev.clientY -this.offsetTop; 20//设置全局捕获21if(oDiv.setCapture){ 22 oDiv.setCapture(); 23 } 2425 document.onmousemove =function(ev){ 26var ev = ev || event; 27 oDiv.style.left = ev.clientX - disX +"px"; 28 oDiv.style.top = ev.clientY - disY +"px"; 29 } 3031 document.onmouseup =function(){ 32 document.onmousemove = document.onmouseup =null; 33//释放事件捕获 releaseCapture();34if(oDiv.releaseCapture){ 35 oDiv.releaseCapture(); 36 } 37 } 3839returnfalse; //阻止事件默认行为4041 } 42 } 4344</script>45</head>46<body>47<p>48 原因:当鼠标按下的时候,如果页面中有文字被选中,那么会触发浏览器默认的文字拖拽效果。<br>49 解决: 用return false; 阻止事件默认行为. 50</p>51<div id="moveBlock">5253</div>54</body>55</html>
封装成一个拖拽函数:
1 <! DOCTYPE html > 2 < html lang ="en" > 3 < head > 4 < title >拖拽封装</title> 5<meta charset="UTF-8"> 6<meta name="viewport" content="width=device-width, initial-scale=1"> 7<style type="text/css"> 8 #moveBlock{ 9 width:100px;height:100px;background-color:#f00;position:absolute 10}11</style>12<script>1314 window.onload =function(){ 1516var oDiv = document.getElementById("moveBlock"); 17 drag(oDiv); 1819function drag(obj){ 20 obj.onmousedown =function(ev){ 21var ev = ev || event; 22var disX = ev.clientX -this.offsetLeft; 23var disY = ev.clientY -this.offsetTop; 2425if(obj.setCapture){ 26 obj.setCapture; 27 } 2829 document.onmousemove =function(ev){ 30var ev = ev || event; 31 obj.style.left = ev.clientX - disX +"px"; 32 obj.style.top = ev.clientY - disY +"px"; 33 } 3435 document.onmouseup =function(){ 36 document.onmousemove = document.onmouseup =null; 37//释放事件捕获 releaseCapture();38if(obj.releaseCapture){ 39 obj.releaseCapture(); 40 } 41 } 4243returnfalse; //阻止事件默认行为4445 } 46 } 4748 } 4950</script>51</head>52<body>53<p>54 原因:当鼠标按下的时候,如果页面中有文字被选中,那么会触发浏览器默认的文字拖拽效果。<br>55 解决: 用return false; 阻止事件默认行为. 56</p>57<div id="moveBlock">5859</div>60</body>61</html>
原文:http://www.cnblogs.com/sese/p/7282760.html
内容总结
以上是互联网集市为您收集整理的js学习笔记28----拖拽全部内容,希望文章能够帮你解决js学习笔记28----拖拽所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。