鼠標拖拽事件


鼠標拖拽事件:

    • 鼠標按下事件;
    • 鼠標移動事件;
    • 鼠標抬起事件。
    • 移動前移動后鼠標在元素上的相對位置不發生改變,所以要記錄鼠標在元素上的位置。
      在移動的時候需要記錄元素的偏移數
      最后需要判斷邊界,當元素到達邊界時就不能再移動了
      最后需要 把屬性重新設置一下,否則元素不能被拖拽。

 

<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style>
            *{
                margin:0;
                padding:0;
                
            }
            div{
                width:100px;
                height:100px;
                background:red;
                position:absolute;  /* 對元素進行定位*/
                left:0;
                top:0;
            }
        </style>
    </head>
    
    <body>
        <div></div>
    </body>
    <script>
        var oDiv = document.getElementsByTagName('div')[0]
        var body = document.getElementsByTagName('body')[0]
        
        // 計算最大偏移距離(后期判斷邊界時要用到)  oDiv.offsetWidth:表示div的寬度
        var maxLeft = window.innerWidth - oDiv.offsetWidth
        var maxTop = window.innerHeight - oDiv.offsetHeight
        
        // 鼠標按下事件
        oDiv.onmousedown = function (e) {
            var ev = e || event
            //記錄鼠標在元素上的位置
            var posX = ev.clientX-oDiv.offsetLeft
            var posY = ev.clientY-oDiv.offsetTop
            //鼠標移動事件
            body.onmousemove = function(e){
                var ev = e || event
                //計算元素的偏移
                var left = ev.clientX-posX
                var top = ev.clientY-posY
                //判斷邊界
                if (left<0){
                    left=0
                }else if (left>maxLeft){
                    left=maxLeft
                }
                if (top<0){
                    top=0
                }else if(top>maxTop){
                    top=maxTop
                }
                
                //重新設置屬性
                oDiv.style.left = left + "px"
                oDiv.style.top = top + "px"
            }    
            //鼠標抬起事件
            body.onmouseup = function(){
                body.onmousemove = null
                body.onmouseup = null
            }
        }
        
    </script>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM