JS鼠標(biāo)拖拽實(shí)例分析
本文實(shí)例講述了JS鼠標(biāo)拖拽實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
JS代碼:
<script> window.onload=function() { var oDiv=document.getElementById('div'); var disX=0; var disY=0; oDiv.onmousedown=function(ev) //鼠標(biāo)按下DIV { var oEvent=ev||event; disX=oEvent.clientX-oDiv.offsetLeft; //鼠標(biāo)的X坐標(biāo)減去DIV的左邊距就等于disX, 這個(gè)disXs是用于確定鼠標(biāo)移動(dòng)DIV時(shí)鼠標(biāo)點(diǎn)和DIV之間的左面距離,這個(gè)距離是不會(huì)變的,通過(guò)這個(gè)新鼠標(biāo)的X坐標(biāo)減去disX就是DIV的Left disY=oEvent.clientY-oDiv.offsetTop; //鼠標(biāo)的Y坐標(biāo)減去DIV的左邊距就等于disY, 這個(gè)disY是用于確定鼠標(biāo)移動(dòng)DIV時(shí)鼠標(biāo)點(diǎn)和DIV之間的上面距離,這個(gè)距離是不會(huì)變的,通過(guò)這個(gè)新鼠標(biāo)的Y坐標(biāo)減去disY就是DIV的Top document.onmousemove=function(ev) //為了防止鼠標(biāo)移動(dòng)太快而離開了DIV產(chǎn)生了bug,所以要給整個(gè)頁(yè)面加onmousemove事件 { var oEvent=ev||event; var oLeft=oEvent.clientX-disX; //新鼠標(biāo)X坐標(biāo)減去disX,也就是鼠標(biāo)移動(dòng)DIV后的Left var oTop=oEvent.clientY-disY; //新鼠標(biāo)Y坐標(biāo)減去disY,也就是鼠標(biāo)移動(dòng)DIV后的Top if(oLeft<0) //當(dāng)DIV的Left小于0,也就是移出左邊 { oLeft=0; //就把DIV的Left設(shè)置為0,就不能移出左邊 } else if(oLeft>document.documentElement.clientWidth-oDiv.offsetWidth) //屏幕寬度減去DIV的寬度就得出了DIV到達(dá)最右邊的寬度,如果Left大于這個(gè)像素 { oLeft=document.documentElement.clientWidth-oDiv.offsetWidth; //就把Left設(shè)置為這個(gè)像素 } if(oTop<0) //當(dāng)DIV的To小于0,也就是移出左邊 { oTop=0; //就把DIV的Top設(shè)置為0,就不能移出上邊 } else if(oTop>document.documentElement.clientHeight-oDiv.offsetHeight) //屏幕高度減去DIV的高度就得出了DIV到達(dá)最下面邊的像素,如果Top大于這個(gè)像素 { oTop=document.documentElement.clientHeight-oDiv.offsetHeight; //就把Top設(shè)置為這個(gè)像素 } oDiv.style.left=oLeft+'px'; //DIV的Left設(shè)置為新鼠標(biāo)X坐標(biāo)減去disX的值 oDiv.style.top=oTop+'px'; //DIV的Top設(shè)置為新鼠標(biāo)Y坐標(biāo)減去disY的值 }; document.onmouseup=function() //鼠標(biāo)松開時(shí) { document.onmousemove=null; //把鼠標(biāo)移動(dòng)清楚 document.onmouseup=null; //把鼠標(biāo)松開清楚 }; return false; //阻止FireFox的默認(rèn)事件 bug }; }; </script>
完整代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無(wú)標(biāo)題文檔</title> <style> div{width:200px;height:200px;background:black;position:absolute;top:0;left:0;} </style> <script> window.onload=function() { var oDiv=document.getElementById('div'); var disX=0; var disY=0; oDiv.onmousedown=function(ev) //鼠標(biāo)按下DIV { var oEvent=ev||event; disX=oEvent.clientX-oDiv.offsetLeft; //鼠標(biāo)的X坐標(biāo)減去DIV的左邊距就等于disX, 這個(gè)disXs是用于確定鼠標(biāo)移動(dòng)DIV時(shí)鼠標(biāo)點(diǎn)和DIV之間的左面距離,這個(gè)距離是不會(huì)變的,通過(guò)這個(gè)新鼠標(biāo)的X坐標(biāo)減去disX就是DIV的Left disY=oEvent.clientY-oDiv.offsetTop; //鼠標(biāo)的Y坐標(biāo)減去DIV的左邊距就等于disY, 這個(gè)disY是用于確定鼠標(biāo)移動(dòng)DIV時(shí)鼠標(biāo)點(diǎn)和DIV之間的上面距離,這個(gè)距離是不會(huì)變的,通過(guò)這個(gè)新鼠標(biāo)的Y坐標(biāo)減去disY就是DIV的Top document.onmousemove=function(ev) //為了防止鼠標(biāo)移動(dòng)太快而離開了DIV產(chǎn)生了bug,所以要給整個(gè)頁(yè)面加onmousemove事件 { var oEvent=ev||event; var oLeft=oEvent.clientX-disX; //新鼠標(biāo)X坐標(biāo)減去disX,也就是鼠標(biāo)移動(dòng)DIV后的Left var oTop=oEvent.clientY-disY; //新鼠標(biāo)Y坐標(biāo)減去disY,也就是鼠標(biāo)移動(dòng)DIV后的Top if(oLeft<0) //當(dāng)DIV的Left小于0,也就是移出左邊 { oLeft=0; //就把DIV的Left設(shè)置為0,就不能移出左邊 } else if(oLeft>document.documentElement.clientWidth-oDiv.offsetWidth) //屏幕寬度減去DIV的寬度就得出了DIV到達(dá)最右邊的寬度,如果Left大于這個(gè)像素 { oLeft=document.documentElement.clientWidth-oDiv.offsetWidth; //就把Left設(shè)置為這個(gè)像素 } if(oTop<0) //當(dāng)DIV的To小于0,也就是移出左邊 { oTop=0; //就把DIV的Top設(shè)置為0,就不能移出上邊 } else if(oTop>document.documentElement.clientHeight-oDiv.offsetHeight) //屏幕高度減去DIV的高度就得出了DIV到達(dá)最下面邊的像素,如果Top大于這個(gè)像素 { oTop=document.documentElement.clientHeight-oDiv.offsetHeight; //就把Top設(shè)置為這個(gè)像素 } oDiv.style.left=oLeft+'px'; //DIV的Left設(shè)置為新鼠標(biāo)X坐標(biāo)減去disX的值 oDiv.style.top=oTop+'px'; //DIV的Top設(shè)置為新鼠標(biāo)Y坐標(biāo)減去disY的值 }; document.onmouseup=function() //鼠標(biāo)松開時(shí) { document.onmousemove=null; //把鼠標(biāo)移動(dòng)清楚 document.onmouseup=null; //把鼠標(biāo)松開清楚 }; return false; //阻止FireFox的默認(rèn)事件 bug }; }; </script> </head> <body> <div id="div"></div> </body> </html>
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- 使用javaScript實(shí)現(xiàn)鼠標(biāo)拖拽事件
- 鼠標(biāo)拖拽移動(dòng)子窗體的JS實(shí)現(xiàn)
- js實(shí)現(xiàn)使用鼠標(biāo)拖拽切換圖片的方法
- js實(shí)現(xiàn)鼠標(biāo)拖拽多選功能示例
- jsMind通過(guò)鼠標(biāo)拖拽的方式調(diào)整節(jié)點(diǎn)位置
- js實(shí)現(xiàn)鼠標(biāo)拖拽div左右滑動(dòng)
- JavaScript鼠標(biāo)拖拽事件詳解
- 超酷的鼠標(biāo)拖拽翻頁(yè)(分頁(yè))效果實(shí)現(xiàn)javascript代碼
- js實(shí)現(xiàn)鼠標(biāo)拖拽縮放div實(shí)例代碼
- JavaScript實(shí)現(xiàn)div的鼠標(biāo)拖拽效果
相關(guān)文章
深入理解JavaScript的事件執(zhí)行機(jī)制
本文主要介紹了JavaScript的事件執(zhí)行機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09收藏,對(duì)比功能的JS部分實(shí)現(xiàn)代碼
非常不錯(cuò)的,收藏效果代碼,增加當(dāng)前頁(yè)的現(xiàn)實(shí),實(shí)現(xiàn)對(duì)比2008-08-08javascript replace()方法的簡(jiǎn)單分析
javascript中replace()在javascript中,String的函數(shù)replace()簡(jiǎn)直太讓人喜愛(ài)了。它靈活而強(qiáng)大的字符替換處理能力,讓我不禁想向大家介紹它。2008-11-11一個(gè)友好的.改善的 Object.prototype.toString的實(shí)現(xiàn)
一個(gè)友好的.改善的 Object.prototype.toString的實(shí)現(xiàn)...2007-04-04JavaScript實(shí)現(xiàn)的多個(gè)圖片廣告交替顯示效果代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的多個(gè)圖片廣告交替顯示效果代碼,涉及javascript數(shù)組遍歷及頁(yè)面元素動(dòng)態(tài)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09javascript把15位身份證轉(zhuǎn)成18的函數(shù)
非常不錯(cuò)的,看了這個(gè)大家就明白身份證的運(yùn)算規(guī)則了2008-10-10JS關(guān)于for循環(huán)中使用setTimeout的四種解決方案
這篇文章主要介紹了JS關(guān)于for循環(huán)中使用setTimeout的四種解決方案,想深入了解JS的同學(xué),一定要看下2021-05-05