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ā)同類(lèi)型事件。
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)文章
利用函數(shù)的惰性載入提高javascript代碼執(zhí)行效率
在 addEvent 函數(shù)每次調(diào)用的時(shí)候都要走一遍,如果瀏覽器支持其中的一種方法,那么他就會(huì)一直支持了,就沒(méi)有必要再進(jìn)行其他分支的檢測(cè)了2014-05-05
JS字節(jié)數(shù)組轉(zhuǎn)數(shù)字及數(shù)字轉(zhuǎn)字節(jié)數(shù)組的方法
本文將深入解析長(zhǎng)整數(shù)與字節(jié)數(shù)組互轉(zhuǎn)的技術(shù)原理,提供ES6(現(xiàn)代瀏覽器/Node.js)與ES5(兼容舊環(huán)境)兩套實(shí)現(xiàn)方案,感興趣的朋友一起看看吧2025-04-04
js從10種顏色中隨機(jī)取色實(shí)現(xiàn)每次取出不同的顏色
昨天在做js 從10種顏色中隨機(jī)取色,并每次取出的顏色不同,具體的實(shí)現(xiàn)思路如下,感興趣的朋友可以參考下2013-10-10
JS 在數(shù)組指定位置插入/刪除數(shù)據(jù)的方法
下面小編就為大家?guī)?lái)一篇JS 在數(shù)組指定位置插入/刪除數(shù)據(jù)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
JavaScript函數(shù)綁定用法實(shí)例分析
這篇文章主要介紹了JavaScript函數(shù)綁定用法,結(jié)合實(shí)例形式分析了javascript函數(shù)綁定的原理、實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
純js實(shí)現(xiàn)仿QQ郵箱彈出確認(rèn)框
仿QQ郵箱的彈出層,彈出確認(rèn)框,主要是用火狐的firebug把html和css扣了下來(lái),沒(méi)有做封裝,就定義了一個(gè)拖動(dòng)事件. 大家可以封裝自己的彈出窗,嘿嘿!2015-04-04
js隱藏與顯示回到頂部按鈕及window.onscroll事件應(yīng)用
現(xiàn)在大多數(shù)網(wǎng)站都會(huì)添加這種功能:當(dāng)滾動(dòng)條滾動(dòng)到頁(yè)面的下方時(shí),頁(yè)面的右下角會(huì)顯示出來(lái)一個(gè)“回到頂部”的按鈕或連接;那么,如何控制“回到頂部”按鈕的顯示或隱藏呢;本文介紹詳細(xì)實(shí)現(xiàn)方法,感興趣的你可不要走開(kāi)哦2013-01-01
鼠標(biāo)懸浮停留三秒后自動(dòng)顯示大圖js代碼
這篇文章主要介紹了鼠標(biāo)懸浮停留三秒后顯示大圖,在網(wǎng)頁(yè)中還是比較實(shí)用的,下面是示例代碼2014-09-09

