js實(shí)現(xiàn)拖拽 閉包函數(shù)詳細(xì)介紹
采用簡(jiǎn)單的閉包實(shí)現(xiàn)方式
/**
* Created with JetBrains WebStorm.
* User: lsj
* Date: 12-11-24
* Time: 下午12:59
* To change this template use File | Settings | File Templates.
*/
var dragmanager=(function()
{
//標(biāo)識(shí)移動(dòng)元素z軸坐標(biāo)
var index_z=1;
//當(dāng)前的拖拽元素
var drganow;
//移動(dòng)標(biāo)識(shí)符號(hào)
var dragbegin=false;
//鼠標(biāo)點(diǎn)擊時(shí)距離div左邊距離
var relativex=0;
//鼠標(biāo)點(diǎn)擊時(shí)距離div上邊距離
var relativey=0;
//標(biāo)識(shí)鼠標(biāo)是否移出
var isout=false;
return {
/**
* 為document綁定鼠標(biāo)提起事件,主要防止鼠標(biāo)移動(dòng)過(guò)快跳出el區(qū)域
*/
bingDocOnMouseUp:function()
{
//注冊(cè)全局的onmouseup事件,主要防止鼠標(biāo)移動(dòng)過(guò)快導(dǎo)致鼠標(biāo)和el不同步
document.onmouseup=function(e)
{
var ev = window.event || e;
if(isout && dragbegin)
{
//改變div的相對(duì)位置
drganow.style.left= (ev.clientX-relativex)+'px';
drganow.style.top=(ev.clientY-relativey)+'px';
drganow.style.cursor='normal';
dragbegin=false;
isout=false;
}
}
},
/**
* 將注入的元素綁定事件
* @param el
*/
registerElementEv:function(element)
{
element.onmousedown=function(e)
{
var ev = window.event || e;
var clientx=ev.clientX;
var clienty= ev.clientY;
var left= parseInt(this.style.left.substring(0, this.style.left.indexOf("p")));
var top= parseInt(this.style.top.substring(0, this.style.top.indexOf("p")));
relativex=clientx-left;
relativey=clienty-top;
index_z++;
this.style.zIndex=index_z;
drganow=this;
dragbegin=true;
}
element.onmousemove=function(e)
{
var ev = window.event || e;
//開(kāi)始拖拽
if(dragbegin)
{
//改變div的相對(duì)位置
this.style.left= (ev.clientX-relativex)+'px';
this.style.top=(ev.clientY-relativey)+'px';
this.style.cursor='move';
}
}
element.onmouseout=function(e)
{
isout=true;
}
element.onmouseup=function(e)
{
var ev = window.event || e;
if(dragbegin)
{
//改變div的相對(duì)位置
drganow.style.left= (ev.clientX-relativex)+'px';
drganow.style.top=(ev.clientY-relativey)+'px';
drganow.style.cursor='normal';
dragbegin=false;
}
}
}
}
})();
1.采用閉包的形式實(shí)現(xiàn) ,方便后期的維護(hù),將移動(dòng)過(guò)程所需的變量全部轉(zhuǎn)移進(jìn)gridmanager里面
2.拖拽過(guò)程中 鼠標(biāo)移動(dòng)過(guò)快導(dǎo)致移動(dòng)元素跟不上鼠標(biāo)的移動(dòng),所以要注冊(cè)document.oumouseup事件,該事件的開(kāi)關(guān)是有移動(dòng)元素的onmouseout事件觸發(fā)的
3.拖拽的過(guò)程中可能會(huì)觸發(fā)瀏覽器自身的onmousemove的select事件,可以進(jìn)行屏蔽ie下是onmousemove="document.selection.empty()"
- JavaScript閉包函數(shù)訪問(wèn)外部變量的方法
- javascript中的return和閉包函數(shù)淺析
- javascript高級(jí)編程之函數(shù)表達(dá)式 遞歸和閉包函數(shù)
- javascript 閉包函數(shù)做顯隱內(nèi)容
- 淺談JavaScript的閉包函數(shù)
- 輕松學(xué)習(xí)Javascript閉包函數(shù)
- JavaScript 匿名函數(shù)(anonymous function)與閉包(closure)
- js bind 函數(shù) 使用閉包保存執(zhí)行上下文
- 弱類(lèi)型語(yǔ)言javascript中 a,b 的運(yùn)算實(shí)例小結(jié)
相關(guān)文章
JavaScript中的構(gòu)造函數(shù)和實(shí)例對(duì)象之間的關(guān)系(構(gòu)造器)
這篇文章主要介紹了JavaScript中的構(gòu)造函數(shù)和實(shí)例對(duì)象之間的關(guān)系(構(gòu)造器),需要的朋友可以參考下2023-05-05
javascript使用alert實(shí)現(xiàn)一個(gè)精美的彈窗
其實(shí)最初使用alert還是一個(gè)常態(tài),包括現(xiàn)在很多B端平臺(tái)還在直接使用alert,本文主要介紹了javascript使用alert實(shí)現(xiàn)一個(gè)精美的彈窗,感興趣的可以了解一下2023-02-02
js實(shí)現(xiàn)翻頁(yè)后保持checkbox選中狀態(tài)的實(shí)現(xiàn)方法
在項(xiàng)目中有需求如下:上下分頁(yè)后,選中的checkbox狀態(tài)保持不變2012-11-11
微信小程序商城分類(lèi)滾動(dòng)列表錨點(diǎn)的項(xiàng)目實(shí)踐
本文主要介紹了微信小程序商城分類(lèi)滾動(dòng)列表錨點(diǎn)的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
javaScript事件學(xué)習(xí)小結(jié)(四)event的公共成員(屬性和方法)
這篇文章主要介紹了javaScript事件學(xué)習(xí)小結(jié)(四)event的公共成員(屬性和方法)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
JS實(shí)現(xiàn)切換標(biāo)簽頁(yè)效果實(shí)例代碼
這篇文章介紹了JS實(shí)現(xiàn)切換標(biāo)簽頁(yè)效果實(shí)例代碼,有需要的朋友可以參考一下2013-11-11
Javascript數(shù)組的?forEach?方法詳細(xì)介紹
這篇文章主要介紹了Javascript數(shù)組的forEach方法詳細(xì)介紹,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
JavaScript中的類(lèi)與實(shí)例實(shí)現(xiàn)方法
這篇文章主要介紹了JavaScript中的類(lèi)與實(shí)例實(shí)現(xiàn)方法,非常巧妙的模擬了類(lèi)與實(shí)例的實(shí)現(xiàn)過(guò)程,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01
通過(guò)一次報(bào)錯(cuò)詳細(xì)談?wù)凱oint事件
這篇文章主要給大家介紹了關(guān)于如何通過(guò)一次報(bào)錯(cuò)詳細(xì)談?wù)凱oint事件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05

