最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js拖拽效果的原理及實現(xiàn)

 更新時間:2021年09月23日 09:58:21   作者:翊希  
這篇文章主要為大家詳細介紹了js拖拽效果的原理及實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

拖拽功能主要是用在讓用戶做一些自定義的動作,比如拖動排序,彈出框拖動移動等等

拖拽的流程動作

1、鼠標按下 會觸發(fā)onmousedown事件

2、鼠標移動 會觸發(fā)onmousemove事件

3、鼠標松開 會觸發(fā)onmouseup事件

拖拽原理

1.鼠標按下+鼠標移動 = 拖拽-------事件 onmousedown + onmousemove

2.鼠標松開 = 無拖拽--------停止拖拽 onmouseup

3.鼠標偏移 = 拖拽距離

當點擊dom的時候,記錄當前鼠標的坐標值,也就是x、y值,以及被拖拽的dom的top、left值,而且還要在鼠標按下的回調(diào)函數(shù)里添加鼠標移動的事件:

document.addEventListener(“mousemove”, moving, false)

和添加鼠標抬起的事件

document.addEventListener(“mouseup”,function() {
document.removeEventListener(“mousemove”, moving, false);
}, false);

這個抬起的事件是為了解除鼠標移動的監(jiān)聽,因為只有在鼠標按下才可以拖拽,抬起就停止不會移動了。

當鼠標按下鼠標移動的時候,記錄移動中的x、y值,那么這個被拖拽的dom的top和left值就是:
top=鼠標按下時記錄的dom的top值+(移動中的y值 - 鼠標按下時的y值)
left=鼠標按下時記錄的dom的left值+(移動中的x值 - 鼠標按下時的x值);

//極簡單版
   var div=document.querySelector("div");
    // 按下時開始監(jiān)聽在文檔中鼠標移動的事件
    // 開始監(jiān)聽鼠標松開鍵的事件
    // 只有按下時才準備拖拽
    div.onmousedown=function(e1){
        // 當鼠標在文檔移動時,不能再div上移動,因為鼠標可能離開div,造成無法拖拽
        div.onmousemove=function(e){
            // 當鼠標移動時,將當前鼠標相對視口的坐標賦值給元素的left和top
            // 因為我們需要在按下的位置拖拽,因此我們還需要獲取按下鍵鼠標相對div的左上角位置
            // 使用當前鼠標位置減去這個相對元素的左上角位置,保證鼠標所按位置拖拽
            div.style.left=e.clientX-e1.offsetX+"px";
            div.style.top=e.clientY-e1.offsetY+"px";
        }
        // 當釋放鼠標鍵時,刪除鼠標移動事件和刪除鼠標釋放事件
        div.onmouseup=function(){
            document.onmousemove=null;
            document.onmouseup=null;
        }
    }

//簡單版
    var div=document.querySelector("div");
    var offsetX,offsetY;
    div.addEventListener("mousedown",mouseDownHandler);

    function mouseDownHandler(e){
        offsetX=e.offsetX
        offsetY=e.offsetY
        document.addEventListener("mousemove",mousemoveHandler)
        document.addEventListener("mouseup",mouseupHandler)
    }

    function mousemoveHandler(e){
        div.style.left=e.clientX-offsetX+"px"
        div.style.top=e.clientY-offsetY+"px"
    }

    function mouseupHandler(e){
        document.removeEventListener("mousemove",mousemoveHandler)
        document.removeEventListener("mouseup",mouseupHandler)
    }

// 簡單升級版
    var div=document.querySelector("div");
    var offsetX,offsetY;
    div.addEventListener("mousedown",mouseHandler);

    function mouseHandler(e){
        if(e.type==="mousedown"){
            offsetX=e.offsetX;
            offsetY=e.offsetY;
            document.addEventListener("mousemove",mouseHandler)
            document.addEventListener("mouseup",mouseHandler)
        }else if(e.type==="mousemove"){
            div.style.left=e.clientX-offsetX+"px"
            div.style.top=e.clientY-offsetY+"px"
        }else if(e.type==="mouseup"){
            document.removeEventListener("mousemove",mouseHandler)
            document.removeEventListener("mouseup",mouseHandler)
        }
}

a、被拖拽的元素的樣式要設置成絕對或相對位置才有效果。
b、拖拽加到document,不然內(nèi)容會脫離

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 被遺忘的javascript的slice() 方法

    被遺忘的javascript的slice() 方法

    javascript數(shù)組對象的slice方法從數(shù)組中分離出一個子數(shù)組,功能類似于字符串對象的substring方法。今天我們就來詳細探討下javascript的這個不太常用的slice()方法。
    2015-04-04
  • JS實現(xiàn)頭條新聞的經(jīng)典輪播圖效果示例

    JS實現(xiàn)頭條新聞的經(jīng)典輪播圖效果示例

    這篇文章主要介紹了JS實現(xiàn)頭條新聞的經(jīng)典輪播圖效果,涉及javascript圖片輪播切換相關實現(xiàn)技巧,需要的朋友可以參考下
    2019-01-01
  • 原生js實現(xiàn)寬度計數(shù)器

    原生js實現(xiàn)寬度計數(shù)器

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)寬度計數(shù)器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • js檢測用戶輸入密碼強度

    js檢測用戶輸入密碼強度

    這篇文章主要為大家詳細介紹了js如何實現(xiàn)檢測用戶輸入密碼強度,從四個方面檢測用戶輸入的密碼的強度的,感興趣的小伙伴們可以參考一下
    2015-10-10
  • Javascript無阻塞加載具體方式

    Javascript無阻塞加載具體方式

    這篇文章介紹了JS無阻塞加載,有需要的朋友可以參考一下
    2013-06-06
  • js之事件冒泡和事件捕獲詳細介紹

    js之事件冒泡和事件捕獲詳細介紹

    事件——怎樣使用事件以及IE和DOM事件模型之間存在哪些主要差別,有需要的朋友可以參考一下
    2013-10-10
  • javascript定時器的簡單應用示例【控制方塊移動】

    javascript定時器的簡單應用示例【控制方塊移動】

    這篇文章主要介紹了javascript定時器的簡單應用,結合javascript事件觸發(fā)控制方塊移動操作分析了javascript定時器使用相關操作技巧,需要的朋友可以參考下
    2019-06-06
  • 再談JavaScript異步編程

    再談JavaScript異步編程

    再談JavaScript異步編程,簡單描述了幾種JavaScript異步編程模式,感興趣的小伙伴們可以參考一下
    2016-01-01
  • uni-app表單組件(form表單)用法舉例

    uni-app表單組件(form表單)用法舉例

    平時我們經(jīng)常會使用到表單,下面這篇文章主要給大家介紹了關于uni-app表單組件(form表單)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • js實現(xiàn)文件上傳功能 后臺使用MultipartFile

    js實現(xiàn)文件上傳功能 后臺使用MultipartFile

    這篇文章主要為大家詳細介紹了純js實現(xiàn)最簡單的文件上傳功能,后臺使用MultipartFile,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評論

南和县| 汾西县| 登封市| 景宁| 博爱县| 荆州市| 西峡县| 潢川县| 陵水| 繁峙县| 赣州市| 哈尔滨市| 鹿邑县| 揭东县| 兰考县| 体育| 五寨县| 莫力| 思南县| 太和县| 太仆寺旗| 澄城县| 佳木斯市| 徐汇区| 泸定县| 鸡东县| 门头沟区| 东安县| 韩城市| 承德县| 宜丰县| 三穗县| 塘沽区| 马山县| 剑川县| 宁夏| 荔波县| 鄱阳县| 监利县| 凤凰县| 沂南县|