国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js實現拖拽 閉包函數詳細介紹

2024-05-06 14:20:52
字體:
來源:轉載
供稿:網友
js拖拽

采用簡單的閉包實現方式
代碼如下:
/**
* 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()
{
//標識移動元素z軸坐標
var index_z=1;
//當前的拖拽元素
var drganow;
//移動標識符號
var dragbegin=false;
//鼠標點擊時距離div左邊距離
var relativex=0;
//鼠標點擊時距離div上邊距離
var relativey=0;
//標識鼠標是否移出
var isout=false;
return {
/**
* 為document綁定鼠標提起事件,主要防止鼠標移動過快跳出el區域
*/
bingDocOnMouseUp:function()
{
//注冊全局的onmouseup事件,主要防止鼠標移動過快導致鼠標和el不同步
document.onmouseup=function(e)
{
var ev = window.event || e;
if(isout && dragbegin)
{
//改變div的相對位置
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;
//開始拖拽
if(dragbegin)
{
//改變div的相對位置
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的相對位置
drganow.style.left= (ev.clientX-relativex)+'px';
drganow.style.top=(ev.clientY-relativey)+'px';
drganow.style.cursor='normal';
dragbegin=false;
}
}
}
}
})();

1.采用閉包的形式實現 ,方便后期的維護,將移動過程所需的變量全部轉移進gridmanager里面
2.拖拽過程中 鼠標移動過快導致移動元素跟不上鼠標的移動,所以要注冊document.oumouseup事件,該事件的開關是有移動元素的onmouseout事件觸發的
3.拖拽的過程中可能會觸發瀏覽器自身的onmousemove的select事件,可以進行屏蔽ie下是onmousemove="document.selection.empty()"
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 大关县| 铅山县| 红原县| 金寨县| 平和县| 中方县| 仁化县| 巴彦县| 白玉县| 武汉市| 页游| 原阳县| 湖南省| 玉溪市| 台南市| 临洮县| 武威市| 嘉兴市| 甘洛县| 图们市| 惠来县| 同江市| 西充县| 上饶县| 泾源县| 彰化市| 宝应县| 邹城市| 盈江县| 哈巴河县| 尼勒克县| 江都市| 大连市| 丰都县| 怀集县| 凌海市| 佛学| 白沙| 石景山区| 宜州市| 舒兰市|