很多时候我们做网站都会遇到 <强> JS拖拽强>的需求,今天就按照一个弹出框拖拽作为一个小案例写个JS原生的代码。
按照上面的需求咱们开始制作一个拖拽效果吧。
<强>第一步,咱们得写一个布局和响应的css 强>
& lt; div id=癰ox"比; ,,,& lt; div id=癰tn"在标题& lt;/div> ,,,& lt; p>青格勒前端博客! & lt;/p> ,,,& lt; p> www.cenggel.com & lt;/div>
& lt; style> 盒子,,,#{,身高:200 px;,宽度:200 px;,背景:# 999;,位置:绝对;},,,,# btn{,高度:30 px;,背景:# 000;,光标:all-scroll;,填充:0,10 px;,颜色:# fff;} & lt;/style>
这里的话咱们id=btn的为拖拽的区域。
<强>二、逻辑讲述强>
整个JS代码不是很多,当鼠标按下的时候获取鼠标的位置和id=框的上距和左边距,然后计算目前的位置。
然后这时候鼠标移动的时候再次计算鼠标的位置,然后给id=框位置
当鼠标按钮松开的时候把onmousemove和onmouseup清除掉
<强>三,JS代码部分强>
& lt; script 类型=拔谋?javascript"比; ,,,function 阻力(obtnf obtn){,,,,,,,//按钮及初始值 ,,,,,,,var obtn =, . getelementbyid (obtn), ,,,,,,,,,,,obtnf =, . getelementbyid (obtnf), ,,,,,,,,,,,disX =, 0, ,,,,,,,,,,,disY =, 0;,,,,,,,,//鼠标按下时开始计算 ,,,,,,,obtn.onmousedown =,函数(ev) {,,,,,,,,,,, var ev =, ev | |, window.event; ,,,,,,,,,,,disX =, ev.clientX 作用;obtnf.offsetLeft; ,,,,,,,,,,,disY =, ev.clientY 作用;obtnf.offsetTop;,,,,,,,,,,,,//鼠标按下并移动时计算 ,,,,,,,,,,,document.onmousemove =,函数(ev) {,,,,,,,,,,,,,,, var ev =, ev | |, window.event; ,,,,,,,,,,,,,,,obtnf.style.left =, ev.clientX 作用;disX +, & # 39; px # 39;; ,,,,,,,,,,,,,,,obtnf.style.top =, ev.clientY 作用;disY +, & # 39; px # 39;; ,,,,,,,,,,,},,,,,,,,,,,,,//鼠标松开时清除时间 ,,,,,,,,,,,document.onmouseup =,函数(){,,,,,,,,,,,,,,,document.onmousemove =,零,,,,,,,,,,,,,,,,,document.onmouseup =,空; ,,,,,,,,,,,},,,,,,,,,,,,,return 假; ,,,,,,,}; ,,,},,,,,//引用 ,,,拖(“box",“btn") & lt;/script>, www.gendan5.com
最后咱们的效果如下
做到这里其实咱们的效果并不完的美,应为当我们拖拽的时候发现,他能直接被拖到浏览器的外面去了,所以咱们再给他加点限制。
最终JS代码如下:
& lt; script 类型=拔谋?javascript"比; ,,,function xianzhi (val,最大值、最小值){,,,,,,,if (val 祝辞,max) {,,,,,,,,,,, return 马克思; ,,,,,,,}else 如果(val & lt;, min) {,,,,,,,,,,, return ,最小值; ,,,,,,,其他}{,,,,,,,,,,,return val; ,,,,,,,},,,,,,,,console.log (val) ,,,},,,,function 阻力(obtnf obtn){,,,,,,,//按钮及初始值 ,,,,,,,var obtn =, . getelementbyid (obtn), ,,,,,,,,,,,obtnf =, . getelementbyid (obtnf), null null null null null null null null null null null null null null null null null null null null原生JS拖拽效果