js方块拖拽(复杂版)

js封装 方块拖拽(复杂版)

我的主页也有简单的版本

Document
<script>
    var div = document.getElementsByTagName('div')[0];

     //事件监听事件 (自己封装的函数 解决不同浏览器兼容性问题)
     function addEvent(elem,type,fn){
        if(elem.addEventListener){
            elem.addEventListener(type,fn)
        }else{
            elem.attachEvent('on'+ type ,fn);
        }
    }

    //取消事件冒泡(自己封装的函数  解决不同浏览器兼容性问题)
    function stopBubble(event){
        if(event.stopPropagation){
            event.stopPropagation();
        }else{
            event.cancelBubble = true;
        }
    }

    //取消默认事件(自己封装的函数 解决不同浏览器兼容性问题)
    function cancelHander(event){
        if(event.preventDefault){
            event.preventDefault();
        }else if(event.returnValue){
            event.returnValue = false;
        }else{
            return false;
        }
    }

    //获得元素属性值(自己封装的函数 解决不同浏览器兼容性问题)
    function getStyle(elem,prop){
        if(window.getComputedStyle){
            return window.getComputedStyle(elem,null)[prop];
        }else{
            return elem.currentStyle[prop];
        }
    }


    //拖拽函数 drag
    function drap(elem){
        var disX,
            disY;
        
        function mouseMove (e){
            var event = e|| window.event;               //解决event(事件) 在不同浏览器的兼容性问题 

            elem.style.left = event.pageX -disX +"px";  //调整方块的left值  
            //-disX 是为了使鼠标不会在一点击就在原地而不是一点击鼠标,方块的左上角就立刻定位到鼠标上
            
            elem.style.top = event.pageY -disY +"px";  //需要elem函数  函数不独立在drag外
        }

        function mouseUp(){
            document.removeEventListener('mousemove',mouseMove);
        }

        /* 函数点击事件为前提条件,才会触发接下来的鼠标移动事件和鼠标松开事件  */
        addEvent(elem,'mousedown',function mouseDown(e){
            var e = e || window.event;                               //解决event(事件) 在不同浏览器的兼容性问题 

            disX = e.pageX - parseInt(getStyle(elem,'left'));       //disX 为鼠标x轴位置到方块的最左边的距离
            disY = e.pageY - parseInt(getStyle(elem,'top'));

            addEvent(document,'mousemove',mouseMove);       //增加鼠标移动事件
            addEvent(elem,'mouseup',mouseUp);                //增加鼠标松开事件

            stopBubble(e);              //取消冒泡
            cancelHander(e);             //取消默认
        });
    }

    
    drap(div);
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值