js實(shí)現(xiàn)簡單的拖拽效果
本文實(shí)例為大家分享了js實(shí)現(xiàn)簡單的拖拽效果的具體代碼,供大家參考,具體內(nèi)容如下
1.拖拽的基本效果
思路:
鼠標(biāo)在盒子上按下時,準(zhǔn)備移動 (事件加給物體)
鼠標(biāo)移動時,盒子跟隨鼠標(biāo)移動 (事件添加給頁面)
鼠標(biāo)抬起時,盒子停止移動 (事件加給頁面)
var o = document.querySelector('div'); //鼠標(biāo)按下 o.onmousedown = function (e) { //鼠標(biāo)相對于盒子的位置 var offsetX = e.clientX - o.offsetLeft; var offsetY = e.clientY - o.offsetTop; //鼠標(biāo)移動 document.onmousemove = function (e) { o.style.left = e.clientX - offsetX + "px"; o.style.top = e.clientY - offsetY + "px"; } //鼠標(biāo)抬起 document.onmouseup = function () { document.onmousemove = null; document.onmouseup = null; } }
2.拖拽的問題
若盒子中出現(xiàn)了文字,或盒子自身為圖片,由于瀏覽器的默認(rèn)行為(文字和圖片本身就可以拖拽),我們可以設(shè)置return false來阻止它的默認(rèn)行為,但這種攔截默認(rèn)行為在IE低版本中,不適用,可以使用全局捕獲來解決IE的問題。
全局捕獲
全局捕獲僅適用于IE低版本瀏覽器。
<button>btn1</button> <button>btn2</button> <script> var bts = document.querySelectorAll('button') bts[0].onclick = function () { console.log(1); } bts[1].onclick = function () { console.log(2); } // bts[0].setCapture() //添加全局捕獲 // bts[0].releaseCapture() ;//釋放全局捕獲 </script>
一旦為指定節(jié)點(diǎn)添加全局捕獲,則頁面中其它元素就不會觸發(fā)同類型事件。
3.完整版的拖拽
var o = document.querySelector('div'); //鼠標(biāo)按下 o.onmousedown = function (e) { if (o.setCapture) { //IE低版本 o.setCapture() } e = e || window.event //鼠標(biāo)相對于盒子的位置 var offsetX = e.clientX - o.offsetLeft; var offsetY = e.clientY - o.offsetTop; //鼠標(biāo)移動 document.onmousemove = function (e) { e = e || window.event o.style.left = e.clientX - offsetX + "px"; o.style.top = e.clientY - offsetY + "px"; } //鼠標(biāo)抬起 document.onmouseup = function () { document.onmousemove = null; document.onmouseup = null; if (o.releaseCapture) { o.releaseCapture();//釋放全局捕獲 } } return false;//標(biāo)準(zhǔn)瀏覽器的默認(rèn)行為 }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JQuery Dialog(JS 模態(tài)窗口,可拖拽的DIV)
- Sortable.js拖拽排序使用方法解析
- js實(shí)現(xiàn)拖拽效果
- javascript實(shí)現(xiàn)移動端上的觸屏拖拽功能
- 使用js實(shí)現(xiàn)的簡單拖拽效果
- JS實(shí)現(xiàn)漂亮的窗口拖拽效果(可改變大小、最大化、最小化、關(guān)閉)
- JS實(shí)現(xiàn)的文件拖拽上傳功能示例
- 使用javaScript實(shí)現(xiàn)鼠標(biāo)拖拽事件
- JS組件Bootstrap Table表格行拖拽效果實(shí)現(xiàn)代碼
- JavaScript實(shí)現(xiàn)水平進(jìn)度條拖拽效果
相關(guān)文章
js實(shí)現(xiàn)定時進(jìn)度條完成后切換圖片
這篇文章主要介紹了js實(shí)現(xiàn)定時進(jìn)度條,進(jìn)度100%以后可以切換圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01Javascript類型轉(zhuǎn)換的規(guī)則實(shí)例解析
這篇文章主要介紹了Javascript類型轉(zhuǎn)換的規(guī)則實(shí)例解析,涉及到j(luò)avascript類型轉(zhuǎn)換相關(guān)知識,對本文感興趣的朋友一起學(xué)習(xí)吧2016-02-02js采用concat和sort將N個數(shù)組拼接起來的方法
這篇文章主要介紹了js采用concat和sort將N個數(shù)組拼接起來的方法,涉及JavaScript針對數(shù)組的合并與排序操作相關(guān)技巧,需要的朋友可以參考下2016-01-01bootstrap學(xué)習(xí)使用(導(dǎo)航條、下拉菜單、輪播、柵格布局等)
這篇文章主要為大家詳細(xì)介紹了bootstrap框架、導(dǎo)航條、下拉菜單、輪播廣告carousel、柵格系統(tǒng)布局、標(biāo)簽頁tabs等相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12echarts如何實(shí)現(xiàn)動態(tài)曲線圖(多條曲線)
這篇文章主要介紹了echarts如何實(shí)現(xiàn)動態(tài)曲線圖(多條曲線),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07JavaScript強(qiáng)制類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換操作示例
這篇文章主要介紹了JavaScript強(qiáng)制類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換操作,結(jié)合實(shí)例形式分析了javascript字符串、數(shù)字等顯示類型轉(zhuǎn)換,以及運(yùn)算、判斷等情況下的隱式類型轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2019-05-05ionic組件ion-tabs選項(xiàng)卡切換效果實(shí)例
這篇文章主要為大家詳細(xì)介紹了ionic組件ion-tabs選項(xiàng)卡切換效果實(shí)例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08javascript ES6 Template String模板字符串使用方法
這篇文章主要介紹了javascript ES6 模板字符串(Template String)是增強(qiáng)版的字符串,用反引號(`)標(biāo)識,它可以當(dāng)作普通字符串使用,也可以用來定義多行字符串,或者在字符串中嵌入變量,需要的朋友可以參考下2023-06-06