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