/**
* 自定義執(zhí)行函數(shù)將變量封為私有變量
*/
;
(function(window) {
//這是一個(gè)私有屬性,不需要被實(shí)例訪(fǎng)問(wèn)
var transform = getTransform();
function Drag(selector) {
//放在構(gòu)造函數(shù)中的屬性,都是屬于每一個(gè)實(shí)例單獨(dú)擁有
this.elem = typeof selector == 'Object' ? selector : document.getElementById(selector);
this.startX = 0;
this.startY = 0;
this.sourceX = 0;
this.sourceY = 0;
this.init();
}
//原型
Drag.prototype = {
constructor: Drag,
init: function () {
//初始化需要做些什么事情
this.setDrag();
},
// 稍作改造,僅用于獲取當(dāng)前元素的屬性,類(lèi)似于getName
getStyle: function(property) {
return document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(this.elem, false)[property] : this.elem.currentStyle[property];
},
getPosition: function(){
var pos = {x: 0, y: 0};
if(transform){
var transformValue = this.getStyle(transform);
if(transformValue == 'none'){
this.elem.style[transform] = 'translate(0, 0)';
}else {
var temp = transformValue.match(/-?\d+/g);
pos = {
x: parseInt(temp[4].trim()),
y: parseInt(temp[5].trim())
}
}
} else {
if(this.getStyle('position') == 'static'){
this.elem.style.position = 'relative';
} else {
pos = {
x: parseInt(this.getStyle('left') ? this.getStyle('left') : 0),
y: parseInt(this.getStyle('top') ? this.getStyle('top') : 0)
}
}
}
return pos;
},
setPosition: function(pos){
if(transform) {
this.elem.style[transform] = 'translate('+ pos.x +'px, '+ pos.y +'px)';
} else {
this.elem.style.left = pos.x + 'px';
this.elem.style.top = pos.y + 'px';
}
},
setDrag: function() {
var self = this;
this.elem.addEventListener('mousedown',start,false);
function start(event){
self.startX = event.pageX;
self.startY = event.pageY;
var pos = self.getPosition();
self.sourceX = pos.x;
self.sourceY = pos.y;
document.addEventListener('mousemove',move,false);
document.addEventListener('mouseup',end,false);
}
function move(event) {
var currentX = event.pageX;
var currentY = event.pageY;
var distanceX = currentX - self.startX;
var distanceY = currentY - self.startY;
self.setPosition({
x: (self.sourceX + distanceX).toFixed(),
y: (self.sourceY + distanceY).toFixed(),
})
}
function end() {
document.removeEventListener('mousemove',move);
document.removeEventListener('mouseup',end);
}
},
};
//私有方法,僅僅用來(lái)獲取transform的兼容寫(xiě)法
function getTransform() {
var transform = '',
divStyle = document.createElement('div').style,
transformArr = ['transform', 'webkitTransform', 'MozTransform', 'msTransform', 'OTransform'],
i = 0;
len = transformArr.length;
for(; i < len; i++){
if(transformArr[i] in divStyle){
return transform = transformArr[i]
}
}
return transform;
}
//一種對(duì)外暴露的方式
window.Drag = Drag;
})(window);
new Drag('app');
面向?qū)ο笏季S用100行代碼封裝一個(gè)拖拽類(lèi)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 結(jié)束易效能一階學(xué)習(xí)后的第一周還處于一種試探和學(xué)習(xí)狀態(tài)中。 所謂試探,是試探自己的堅(jiān)持,但凡事開(kāi)始總是興奮的,所以本...
- 本周任務(wù)(12.17-23) 每天三件事 運(yùn)動(dòng):至少健身房三次 雅思:三課,補(bǔ)上周三課 科研:知識(shí)付費(fèi)調(diào)研匯總整理...
- 3月22、23日,“三門(mén)峽市小學(xué)數(shù)學(xué)優(yōu)質(zhì)課評(píng)比觀摩活動(dòng)”在三門(mén)峽外國(guó)語(yǔ)小學(xué)舉行。有幸參加,近距離感受了三門(mén)峽...
- 看到網(wǎng)絡(luò)上很多“依賴(lài)注入”解釋的話(huà)題,這篇博客呢也只是我自己的觀點(diǎn),如果你有不同的觀點(diǎn)請(qǐng)拍磚,不用客氣。 業(yè)務(wù)場(chǎng)景...