javascript - 为什么我的拖拽老是出问题
黄舟
黄舟 2017-04-10 16:09:04
[JavaScript讨论组]
html

<p class="dragable"></p>


css


*{
    margin: 0;
    padding : 0;
}
.dragable {
    position: absolute;
    width: 100px;
    height: 100px;
    background: red;
}


js

function Dragdrop(){
    var draging=null,
        diffX= 0,
        diffY=0;
    function handleEvent(e){
        var e=e || window.event;
        var target= e.target|| e.srcElement;
        switch (e.type){
            case "mousedown":
                if(target.className.indexOf('dragable')>-1){
                    draging=target;
                    diffX= e.clientX-target.offsetLeft;
                    diffY= e.clientY-target.offsetTop;
                }
            break;
            case "mousemove":
                if(draging){
                    var left=e.clientX-diffX,
                        top= e.clientY-diffY;
                    console.log(e.clientX);
                    console.log(diffX);
                    console.log(e.clientX-diffX)
                  if(left < 0){
                        left=0;
                  }
                    /*下面这段注释掉就没问题*/
                    if(left > windowRect().winWidth-target.offsetWidth){
                        left=windowRect().winWidth-target.offsetWidth;
                    }

              /*      if(top <= 0){
                        top=0;
                    }
                    if(top>=windowRect().winHeight-target.offsetHeight){

                        top=windowRect().winHeight-target.offsetHeight;
                        console.log(top)
                    }*/

                    draging.style.left=left+'px';
                    draging.style.top=top+'px';
                }
            break;
            case "mouseup":
                draging=null;
                break;
        }
    }
    return {
        enable: function () {
            document.addEventListener('mousedown',handleEvent,false)
            document.addEventListener('mousemove',handleEvent,false)
            document.addEventListener('mouseup',handleEvent,false)
        },
        disable: function () {
            document.removeEventListener('mousedown',handleEvent,false);
            document.removeEventListener('mousemove',handleEvent,false);
            document.removeEventListener('mouseup',handleEvent,false);
        }
    }
}


function addEvent(){

}
Dragdrop().enable();

function windowRect(){
    var winWidth= 0,
        winHeight=0;
   /* if(window.innerHeight){
        winWidth=window.innerWidth;
        winHeight=window.innerHeight;
    }*/
    if(document.compatMode=='CSS1Compat'){
        winWidth=document.documentElement.clientWidth;
        winHeight=document.documentElement.clientHeight;
    }else{
        winWidth=document.body.clientWidth;
        winHeight=document.body.clientHeight;
    }
    return {
        winWidth:winWidth,
        winHeight:winHeight
    }
}

写了一段很简单的拖拽,为什么在mousemove里面那段代码注释点就没问题,不注释稍微移动快点就有问题呢?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
PHP中文网

在拖拽中间,target对象发生了变化造成的。
判断排除就好了。

function handleEvent(e) {
    var e = e || window.event;
    var target = e.target || e.srcElement;
    if(target.className.indexOf('dragable') == -1){
        return;
    }
    switch (e.type) {
        case "mousedown":
            if (target.className.indexOf('dragable') > -1) {
                draging = target;
                diffX = e.clientX - target.offsetLeft;
                diffY = e.clientY - target.offsetTop;
            }
            break;
        case "mousemove":
            if (draging) {
                var left = e.clientX - diffX, top = e.clientY - diffY;
                if (left < 0) {
                    left = 0;
                }
                /*下面这段注释掉就没问题*/
                if (left > windowRect().winWidth - target.offsetWidth) {
                    left = windowRect().winWidth - target.offsetWidth;
                }
                draging.style.left = left + 'px';
                draging.style.top = top + 'px';
            }
            break;
        case "mouseup":
            draging = null;
            break;
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号