码迷,mamicode.com
首页 > 其他好文 > 详细

鼠标拖拽事件

时间:2018-10-23 23:01:51      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:改变   head   meta   fse   client   nbsp   The   htm   宽度   

鼠标拖拽事件:

    • 鼠标按下事件;
    • 鼠标移动事件;
    • 鼠标抬起事件。
    • 移动前移动后鼠标在元素上的相对位置不发生改变,所以要记录鼠标在元素上的位置。
      在移动的时候需要记录元素的偏移数
      最后需要判断边界,当元素到达边界时就不能再移动了
      最后需要 把属性重新设置一下,否则元素不能被拖拽。

 

<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>

 

鼠标拖拽事件

标签:改变   head   meta   fse   client   nbsp   The   htm   宽度   

原文地址:https://www.cnblogs.com/jiangtao159/p/9839256.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!