拖動(dòng)拖拽插件

分享一個(gè)封裝好的拖動(dòng)插件,使用方式很簡(jiǎn)單集嵌,入?yún)魅胄枰蟿?dòng)的dom即可(支持pc端萝挤,h5端)

例子:Drag(document.getElementsByClassName("test")[0]);

效果:


廢話不多話上代碼:

(function?(window)?{

????????????var?dom?=?{

????????????????//綁定事件

????????????????on:?function?(node,?eventName,?handler)?{

????????????????????if?(node.addEventListener)?{

????????????????????????node.addEventListener(eventName,?handler);

????????????????????}?else?{

????????????????????????node.attachEvent("on"?+?eventName,?handler);

????????????????????}

????????????????},

????????????????//獲取元素的樣式

????????????????getStyle:?function?(node,?styleName)?{

????????????????????var?realStyle?=?null;

????????????????????if?(window.getComputedStyle)?{

????????????????????????realStyle?=?window.getComputedStyle(node,?null)[styleName];

????????????????????}?else?if?(node.currentStyle)?{

????????????????????????realStyle?=?node.currentStyle[styleName];

????????????????????}

????????????????????return?realStyle;

????????????????},

????????????????//獲取設(shè)置元素的樣式

????????????????setCss:?function?(node,?css)?{

????????????????????for?(var?key?in?css)?{

????????????????????????node.style[key]?=?css[key];

????????????????????}

????????????????},

????????????};

????????????//#region?拖拽元素類

????????????function?DragElement(node)?{

????????????????this.node?=?node;

????????????????this.x?=?0;

????????????????this.y?=?0;

????????????}

????????????DragElement.prototype?=?{

????????????????constructor:?DragElement,

????????????????init:?function?()?{

????????????????????this.setEleCss({

????????????????????????left:?dom.getStyle(node,?"left"),

????????????????????????top:?dom.getStyle(node,?"top"),

????????????????????}).setXY(node.style.left,?node.style.top);

????????????????},

????????????????setXY:?function?(x,?y)?{

????????????????????this.x?=?parseInt(x)?||?0;

????????????????????this.y?=?parseInt(y)?||?0;

????????????????????return?this;

????????????????},

????????????????setEleCss:?function?(css)?{

????????????????????dom.setCss(this.node,?css);

????????????????????return?this;

????????????????},

????????????};

????????????//#endregion

????????????//#region?鼠標(biāo)元素

????????????function?Mouse()?{

????????????????this.x?=?0;

????????????????this.y?=?0;

????????????}

????????????Mouse.prototype.setXY?=?function?(x,?y)?{

????????????????this.x?=?parseInt(x);

????????????????this.y?=?parseInt(y);

????????????};

????????????//#endregion

????????????//拖拽配置

????????????var?draggableConfig?=?{

????????????????zIndex:?1,

????????????????draggingObj:?null,

????????????????mouse:?new?Mouse(),

????????????};

????????????function?Drag(ele)?{

????????????????this.ele?=?ele;

????????????????dom.on(ele,?"mousedown",?mouseDown);

????????????????dom.on(ele,?"touchstart",?mouseDown);

????????????????dom.on(ele,?"mousemove",?mousemove);

????????????????dom.on(ele,?"touchmove",?mousemove);

????????????????dom.on(ele,?"mouseup",?mouseup);

????????????????dom.on(ele,?"touchend",?mouseup);

????????????????ele.onselectstart?=?function?()?{

????????????????????//防止拖拽對(duì)象內(nèi)的文字被選中

????????????????????return?false;

????????????????};

????????????}

????????????function?getPositionInfo(event)?{

????????????????var?clientX?=?event.clientX;

????????????????if?(event.clientX)?{

????????????????????return?event;

????????????????}?else?{

????????????????????return?event.targetTouches[0];

????????????????}

????????????}

????????????function?mouseDown(event)?{

????????????????var?ele?=?event.target?||?event.srcElement;

????????????????var?{

????????????????????clientX,

????????????????????clientY

????????????????}?=?getPositionInfo(event);

????????????????draggableConfig.mouse.setXY(clientX,?clientY);

????????????????draggableConfig.draggingObj?=?new?DragElement(ele);

????????????????draggableConfig.draggingObj.setXY(ele.style.left,?ele.style.top)

????????????????????.setEleCss({

????????????????????????zIndex:?draggableConfig.zIndex++,

????????????????????????position:?"relative",

????????????????????});

????????????}

????????????function?mousemove(event)?{

????????????????if?(draggableConfig.draggingObj)?{

????????????????????var?{

????????????????????????clientX,

????????????????????????clientY

????????????????????}?=?getPositionInfo(event);

????????????????????var?mouse?=?draggableConfig.mouse,

????????????????????????draggingObj?=?draggableConfig.draggingObj;

????????????????????draggingObj.setEleCss({

????????????????????????left:?parseInt(clientX?-?mouse.x?+?draggingObj.x)?+?"px",

????????????????????????top:?parseInt(clientY?-?mouse.y?+?draggingObj.y)?+?"px",

????????????????????});

????????????????}

????????????}

????????????function?mouseup(event)?{

????????????????draggableConfig.draggingObj?=?null;

????????????}

????????????window.Drag?=?Drag;

})(window);

感謝,老鐵的閱讀根欧,如果喜歡的,幫忙點(diǎn)個(gè)??,你的支持我是前進(jìn)的動(dòng)力++

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怜珍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凤粗,更是在濱河造成了極大的恐慌绘面,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侈沪,死亡現(xiàn)場(chǎng)離奇詭異揭璃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)亭罪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門瘦馍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人应役,你說我怎么就攤上這事情组≡锟辏” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵院崇,是天一觀的道長(zhǎng)肆氓。 經(jīng)常有香客問我,道長(zhǎng)底瓣,這世上最難降的妖魔是什么谢揪? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮捐凭,結(jié)果婚禮上拨扶,老公的妹妹穿的比我還像新娘。我一直安慰自己茁肠,他們只是感情好患民,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垦梆,像睡著了一般匹颤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上托猩,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天惋嚎,我揣著相機(jī)與錄音,去河邊找鬼站刑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鼻百,可吹牛的內(nèi)容都是我干的绞旅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼温艇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼因悲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勺爱,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晃琳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后琐鲁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卫旱,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年围段,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顾翼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奈泪,死狀恐怖适贸,靈堂內(nèi)的尸體忽然破棺而出灸芳,到底是詐尸還是另有隱情,我是刑警寧澤拜姿,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布烙样,位于F島的核電站,受9級(jí)特大地震影響蕊肥,放射性物質(zhì)發(fā)生泄漏谒获。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一晴埂、第九天 我趴在偏房一處隱蔽的房頂上張望究反。 院中可真熱鬧,春花似錦儒洛、人聲如沸精耐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卦停。三九已至,卻和暖如春恼蓬,著一層夾襖步出監(jiān)牢的瞬間惊完,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工处硬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留小槐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓荷辕,卻偏偏與公主長(zhǎng)得像凿跳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疮方,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348