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

首頁 > 編程 > JavaScript > 正文

工作需要寫的一個(gè)js拖拽組件

2019-11-20 23:44:49
字體:
供稿:網(wǎng)友
復(fù)制代碼 代碼如下:

/*
*使用方法:
* var d = new Drag({id:'dragPannel',maxLeft:500,maxTop:200});
* d.ready();
*請注意:
* 拖動(dòng)對象的left和top樣式必須寫在其style屬性里邊
*
*/
//矯正調(diào)用者。將 fn 作為 newObj 的方法調(diào)用
function repairCaller(newObj, fn){
return function(){
return fn.apply(newObj, arguments);
}
}
function Drag( config ){
this.moveTarget = T.dom.get( config.id );
this.startLeft = parseInt(this.moveTarget.style.left); //每次拖動(dòng)開始時(shí)被拖動(dòng)對象的 left,top
this.startTop = parseInt(this.moveTarget.style.top);
this.startClientX = this.startLeft; //保存拖動(dòng)開始時(shí)事件的 clientX, clientY
this.startClientY = this.startTop;
this.MAX_LEFT = config.maxLeft||document.documentElement.clientWidth - this.moveTarget.offsetWidth; //元素可以移動(dòng)的最大范圍
this.MAX_TOP = config.maxTop||document.documentElement.clientHeight - this.moveTarget.offsetHeight;
this.lock = true;
}
Drag.prototype.ready = function(){
//綁定事件
T.bind(document, "mousedown", repairCaller(this,this.down));
T.bind(document, "mousemove", repairCaller(this,this.move));
T.bind(document, "mouseup", repairCaller(this,this.stop));
}
Drag.prototype.down = function(){
//取得事件對象
var event = T.event.getEvent(arguments[0]),
target = T.event.getTarget(event);
if (target == this.moveTarget){
this.lock = false;
//在事件開始時(shí)保存各種坐標(biāo)位置
this.startLeft = parseInt(this.moveTarget.style.left);
this.startTop = parseInt(this.moveTarget.style.top);
this.startClientX = event.clientX;
this.startClientY = event.clientY;
}
};
Drag.prototype.move = function(){
if(!this.lock ){
//取得事件對象
var event = T.event.getEvent(arguments[0]),
target = T.event.getTarget(event);
if(target == this.moveTarget){
//如有選擇內(nèi)容,清除之
//window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
//湊數(shù)拖動(dòng)范圍有沒超過最大限制
var realLeft = this.startLeft + event.clientX - this.startClientX, //實(shí)際的移動(dòng)范圍
realTop = this.startTop + event.clientY - this.startClientY,
rightLeft , rightTop; //正確的 left, top 取值
rightLeft = realLeft > this.MAX_LEFT ? this.MAX_LEFT : ( realLeft > 0 ? realLeft : 0 );
rightTop = realTop > this.MAX_TOP ? this.MAX_TOP : ( realTop > 0 ? realTop : 0 );
this.moveTarget.style.left = rightLeft + "px";
this.moveTarget.style.top = rightTop + "px";
}
else{
this.lock = true;
}
}
};
Drag.prototype.stop = function(){
this.lock = true
};

后記:
在寫的過程中非常需要注意的幾點(diǎn)是:
1、拖動(dòng)層的 position、left 和 top 必須寫在 style 里
2、移動(dòng)過程中設(shè)置 left 和 top 要帶單位,否則不起作用
3、多級 div 嵌套時(shí)需要給父 div 加 over-flow:hidden 樣式
完畢!
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通河县| 繁峙县| 泰兴市| 桦南县| 肃北| 邹城市| 信宜市| 岢岚县| 临海市| 乡城县| 江永县| 延吉市| 饶平县| 镇巴县| 简阳市| 红原县| 霸州市| 屏山县| 长丰县| 灌阳县| 东城区| 阜新市| 万山特区| 郑州市| 永登县| 慈利县| 富蕴县| 清新县| 滦平县| 定安县| 都安| 翁源县| 昌宁县| 全州县| 辽中县| 贵定县| 石楼县| 喀喇沁旗| 广水市| 平果县| 综艺|