js實現(xiàn)可拖動DIV的方法
隨著時代的變化,越來越感覺到j(luò)s的重要性,js不僅可以做web頁面(如Ext框架),還可以做一些web的特效,這些特效不僅兼容PC,而且兼容手機(jī)端,畢竟是基于瀏覽器的,和平臺沒關(guān)系?,F(xiàn)在微軟的windows8 系統(tǒng)的App都可以用js開發(fā)了,大家有時間可以去嘗試一下。
現(xiàn)在切入正題,說一下js 實現(xiàn)可拖動Div.實現(xiàn)這個功能我們先說一下思路:
1.捕捉鼠標(biāo)div的mousedown事件
2.捕捉 document的 mousemove事件
3.取消事件
然后我們看一下代碼:
function Drag(id) {
var $ = function (flag) {
return document.getElementById(flag);
}
$(id).onmousedown = function (e) {
var d = document;
var page = {
event: function (evt) {
var ev = evt || window.event;
return ev;
},
pageX: function (evt) {
var e = this.event(evt);
return e.pageX || (e.clientX + document.body.scrollLeft - document.body.clientLeft);
},
pageY: function (evt) {
var e = this.event(evt);
return e.pageY || (e.clientY + document.body.scrollTop - document.body.clientTop);
},
layerX: function (evt) {
var e = this.event(evt);
return e.layerX || e.offsetX;
},
layerY: function (evt) {
var e = this.event(evt);
return e.layerY || e.offsetY;
}
}
var x = page.layerX(e);
var y = page.layerY(e);
if (dv.setCapture) {
dv.setCapture();
}
else if (window.captureEvents) {
window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
}
d.onmousemove = function (e) {
var tx = page.pageX(e) - x;
var ty = page.pageY(e) - y;
dv.style.left = tx + "px";
dv.style.top = ty + "px";
}
d.onmouseup = function () {
if (dv.releaseCapture) {
dv.releaseCapture();
}
else if (window.releaseEvents) {
window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP);
}
d.onmousemove = null;
d.onmouseup = null;
}
}
}
代碼分析:
1.
獲取div對象
var $ = function (flag) {
return document.getElementById(flag);
}
2.捕捉document的mousedown事件:
里面有這么一段代碼:
var page = {
event: function (evt) {
var ev = evt || window.event;
return ev;
},
pageX: function (evt) {
var e = this.event(evt);
return e.pageX || (e.clientX + document.body.scrollLeft - document.body.clientLeft);
},
pageY: function (evt) {
var e = this.event(evt);
return e.pageY || (e.clientY + document.body.scrollTop - document.body.clientTop);
},
layerX: function (evt) {
var e = this.event(evt);
return e.layerX || e.offsetX;
},
layerY: function (evt) {
var e = this.event(evt);
return e.layerY || e.offsetY;
}
}
其中event獲取鼠標(biāo)事件,pageX,pageY獲取鼠標(biāo)的坐標(biāo),layerX,layerY獲取鼠標(biāo)距離div邊框的距離。
還有一段代碼:
if (dv.setCapture) {
dv.setCapture();
}
else if (window.captureEvents) {
window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
}
這個就是捕捉div的MouseMove和MouseUp事件,不懂得tx可以到網(wǎng)上查查。
3. document的MouseMove和mouseUp事件:
d.onmousemove = function (e) {
var tx = page.pageX(e) - x;
var ty = page.pageY(e) - y;
dv.style.left = tx + "px";
dv.style.top = ty + "px";
}
d.onmouseup = function () {
if (dv.releaseCapture) {
dv.releaseCapture();
}
else if (window.releaseEvents) {
window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP);
}
d.onmousemove = null;
d.onmouseup = null;
}
其中的tx,ty就是最重要的代碼了,是設(shè)置div坐標(biāo)的
有的人可能會問為什么要-x,-y?
x,y其實就是獲取鼠標(biāo)距離div邊框的距離,如果不減掉的話
鼠標(biāo)箭頭的坐標(biāo)和div的x,y坐標(biāo)一樣了,這樣拖動之后,鼠標(biāo)的位置會偏到左上角,效果就是,拖動之后會彈動一下。
if (dv.releaseCapture) {
dv.releaseCapture();
}
else if (window.releaseEvents) {
window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP);
}
d.onmousemove = null;
d.onmouseup = null;
上面這段代碼就是在鼠標(biāo)松開之后取消document的onmousemove,onmouseup事件。
最近都在學(xué)習(xí)js,后續(xù)有新的心得體會也會與大家分享,希望與大家共同學(xué)習(xí),進(jìn)步。
- js 鼠標(biāo)拖動對象 可讓任何div實現(xiàn)拖動效果
- javascript div 彈出可拖動窗口
- 利用javascript移動div層-javascript 拖動層
- js通過八個點(diǎn) 拖動改變div大小的實現(xiàn)方法
- js拖動div 當(dāng)鼠標(biāo)移動時整個div也相應(yīng)的移動
- javascript 可以拖動的DIV(二)
- Javascript實現(xiàn)的類似Google的Div拖動效果代碼
- JavaScript實現(xiàn)可拖拽的拖動層Div實例
- javascript實現(xiàn)div的拖動并調(diào)整大小類似qq空間個性編輯模塊
- js實現(xiàn)div色塊拖動錄制
相關(guān)文章
基于Flowplayer打造一款免費(fèi)的WEB視頻播放器附源碼
Flowplayer是一款免費(fèi)的WEB視頻播放器。它支持播放flv、swf等流媒體和圖片文件,能夠非常流暢的播放視頻文件,支持自定義配置和擴(kuò)展。下面本篇文章給大家介紹基于Flowplayer打造一款免費(fèi)的WEB視頻播放器,需要的朋友可以參考下2015-09-09一個友好的.改善的 Object.prototype.toString的實現(xiàn)
一個友好的.改善的 Object.prototype.toString的實現(xiàn)...2007-04-04一文看懂如何簡單實現(xiàn)節(jié)流函數(shù)和防抖函數(shù)
這篇文章主要給大家介紹了如何通過一文看懂簡單實現(xiàn)節(jié)流函數(shù)和防抖函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Auntion-TableSort javascript類文件
Auntion-TableSort javascript類文件...2007-11-11javascript設(shè)計模式 – 工廠模式原理與應(yīng)用實例分析
這篇文章主要介紹了javascript設(shè)計模式 – 工廠模式,結(jié)合實例形式分析了javascript工廠模式基本概念、原理、定義、應(yīng)用場景及相關(guān)操作注意事項,需要的朋友可以參考下2020-04-04微信小程序?qū)㈨撁姘粹o懸浮固定在底部的實現(xiàn)代碼
這篇文章主要介紹了微信小程序?qū)㈨撁姘粹o懸浮固定在底部的實現(xiàn)代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10微信小程序使用websocket通訊的demo,含前后端代碼,親測可用
這篇文章主要介紹了微信小程序使用websocket通訊的demo,含前后端代碼,親測可用,需要的朋友可以參考下2019-05-05