JS事件_拖拽封裝

寫在前面厕宗,初學者,共同進步 奠货,個人筆記分享

01


拖拽.gif

拖拽

網(wǎng)頁中經(jīng)常需要div的拖動介褥,這里寫的封裝的一個函數(shù)是無限制的拖拽,可以在子類中添加各種限制條件仇味,完成拖拽呻顽。

02


  • 面向對象的方法,構造函數(shù)里保存屬性丹墨,方法使用**函數(shù)名.prototype.方法名
    **
  • ** disXdisY分別是鼠標與div**的橫向和縱向距離
  • var _this = this; 解決了在后面的事件添加中廊遍,this的變化導致的錯誤
  • 添加鼠標移動函數(shù)
/**
 * @constructor
 * @param {String} id = id為盒子div的id
 * @description 拖拽
 * @example 
 * var myDrag = new Drag('id'); 
 */
function Drag(id) {
    this.disX = 0;
    this.disY = 0;
    var _this = this;
    this.oDiv = document.getElementById(id);
    
    //鼠標按下事件
    this.oDiv.onmousedown = function() {
        _this.Down();
        //阻止默認事件
        return false;
    };  
}

03方法


鼠標按下
  • 先記錄鼠標按下的位置與div之間的距離
  • 在鼠標按下函數(shù)中綁定鼠標移動和抬起事件
  • setCapture函數(shù)功能:一旦窗口捕獲了鼠標,所有鼠標輸入都針對該窗口贩挣,無論光標是否在窗口的邊界內(nèi)喉前。同一時刻只能有一個窗口捕獲鼠標没酣。如果鼠標光標在另一個線程創(chuàng)建的窗口上,只有當鼠標鍵按下時系統(tǒng)才將鼠標輸入指向指定的窗口卵迂。 簡單來說裕便,這里添加的意義就是在div上的事件,我們拖動div時见咒,不會選中頁面的其他內(nèi)容偿衰。
//鼠標按下函數(shù)
Drag.prototype.Down = function(ev) {
    var _this = this;
    var oEvent = ev || event;
    //在鼠標按下的時候記錄鼠標與div之間的橫向縱向距離
    this.disX = oEvent.clientX - _this.oDiv.offsetLeft;
    this.disY = oEvent.clientY - _this.oDiv.offsetTop;
    
    //事件綁定 解決拖動文字被選中的問題
    if (this.oDiv.setCapture) {
        //IE
        this.oDiv.onmousemove =function(){
            _this.fnMove(ev);
        };
        this.oDiv.onmouseup = function(){
            _this.fnUp(this);
        };
        this.oDiv.setCapture();
    } else{
        document.onmousemove = function(ev) {
            _this.fnMove(ev);
        };
        document.onmouseup = function() {
            _this.fnUp(this);       
        };
    }
}
鼠標移動與抬起
  • 動態(tài)獲取鼠標的位置,根據(jù)鼠標按下時存儲的距離改览,計算div的位置下翎,實時更新
  • 鼠標抬起時釋放事件
//鼠標移動時根據(jù)鼠標的位置計算div的位置并實時更新位置
Drag.prototype.fnMove = function(ev) {
    var oEvent = ev || event;
    var left = oEvent.clientX - this.disX;
    var top = oEvent.clientY - this.disY;

    this.oDiv.style.left = left + 'px';
    this.oDiv.style.top = top + 'px';
}
//鼠標抬起來的時候釋放鼠標移動以及抬起事件
Drag.prototype.fnUp = function(oAttr) {
    oAttr.onmousemove = null;
    oAttr.onmouseup = null;
      //需要釋放捕獲的事件
    if (oAttr.releaseCapture) {
        oAttr.releaseCapture();
    }
}

04 使用


new Drag( );

  • new一個實例
  • 可以重寫父類的方法

05 封裝函數(shù)源碼與小例子


js文件可直接引用
Drag.js 框架下載
運用的例子

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宝当,隨后出現(xiàn)的幾起案子视事,更是在濱河造成了極大的恐慌,老刑警劉巖庆揩,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俐东,死亡現(xiàn)場離奇詭異,居然都是意外死亡订晌,警方通過查閱死者的電腦和手機虏辫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腾仅,“玉大人乒裆,你說我怎么就攤上這事套利⊥评” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵肉迫,是天一觀的道長验辞。 經(jīng)常有香客問我,道長喊衫,這世上最難降的妖魔是什么跌造? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮族购,結果婚禮上壳贪,老公的妹妹穿的比我還像新娘。我一直安慰自己寝杖,他們只是感情好违施,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瑟幕,像睡著了一般磕蒲。 火紅的嫁衣襯著肌膚如雪留潦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天辣往,我揣著相機與錄音兔院,去河邊找鬼。 笑死站削,一個胖子當著我的面吹牛坊萝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播许起,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼屹堰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了街氢?” 一聲冷哼從身側響起扯键,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎珊肃,沒想到半個月后荣刑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡伦乔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年厉亏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烈和。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡爱只,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出招刹,到底是詐尸還是另有隱情恬试,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布疯暑,位于F島的核電站训柴,受9級特大地震影響,放射性物質發(fā)生泄漏妇拯。R本人自食惡果不足惜幻馁,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望越锈。 院中可真熱鬧仗嗦,春花似錦、人聲如沸甘凭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽对蒲。三九已至钩蚊,卻和暖如春贡翘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背砰逻。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工鸣驱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝠咆。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓踊东,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刚操。 傳聞我的和親對象是個殘疾皇子闸翅,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容