Javascript DIV标记滚动时出错

Javascript DIV标记滚动时出错,javascript,html,Javascript,Html,我已经创建了一个可拖动的div窗口,并创建了一个可滚动的子div(在窗口div中带有)。这些都可以单独工作,但是当我试图通过单击scroll的上下箭头滚动内部div时,拖动事件在滚动完成后触发。我无法解决此问题…请提供任何建议 这是代码 <!DOCTYPE HTML> <HTML> <HEAD> <TITLE> Reporting</TITLE> <META NAME="Generator" CON

我已经创建了一个可拖动的div窗口,并创建了一个可滚动的子div(在窗口div中带有)。这些都可以单独工作,但是当我试图通过单击scroll的上下箭头滚动内部div时,拖动事件在滚动完成后触发。我无法解决此问题…请提供任何建议

这是代码

<!DOCTYPE HTML>
    <HTML>
    <HEAD>
    <TITLE> Reporting</TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    <style>
    body{
    font-family:Arial,Helvetica,sans-serif;
    font-size:0.7em;
    }
    .Object{
    width:190px;
    height:100px;
    border:1px solid black;
    border-radius:7px 7px 7px 7px;
    box-shadow:3px 3px 2px #D2D2D2;
    position:absolute;
    resize:
    }

    .ObjHdr{
     color:#fff;
     background:#363636; 
     padding:3px 0px 3px 7px;
     border-radius:6px 6px 0px 0px;;
     font-weight:bold;
     cursor:move;
    }

    .ObjBody{
     width:190px;
     height:77px;
     overflow:scroll;
    }

    .ObjEle{
     padding:1px 0px 1px 4px;
     color:#000;
     border-bottom:1px solid black;
     cursor:pointer;
    }

    </style>

    </HEAD>
    <BODY>

     <div id="ObjCountry" class="Object">
       <div class="ObjHdr">Country</div>
       <div id =sd class="ObjBody" unselectable="on">
        <div class="ObjEle">India</div>
        <div class="ObjEle">China</div>
        <div class="ObjEle">USA</div>
        <div class="ObjEle">Iran</div>
        <div class="ObjEle">Iraq</div>
        <div class="ObjEle">Indonesia</div>
       </div>
     </div>

    </BODY>
    </HTML>

    <script>

    var DragHandler = {

        // private property.
        _oElem : null,

        // public method. Attach drag handler to an element.
        attach : function(oElem) {
            oElem.onmousedown = DragHandler._dragBegin;

            // callbacks
            oElem.dragBegin = new Function();
            oElem.drag = new Function();
            oElem.dragEnd = new Function();

            return oElem;
        },

        // private method. Begin drag process.
        _dragBegin : function(e) {
            var oElem = DragHandler._oElem = this;

            if (isNaN(parseInt(oElem.style.left))) { oElem.style.left = '0px'; }
            if (isNaN(parseInt(oElem.style.top))) { oElem.style.top = '0px'; }

            var x = parseInt(oElem.style.left);
            var y = parseInt(oElem.style.top);

            e = e ? e : window.event;
            oElem.mouseX = e.clientX;
            oElem.mouseY = e.clientY;

            oElem.dragBegin(oElem,x,y);

            //document.onmousemove = DragHandler._drag;
            document.onmouseup = DragHandler._dragEnd;
            oElem.onmousemove = DragHandler._drag;
            oElem.onmouseup = DragHandler._dragEnd;
            return false;
        },

        // private method. Drag (move) element.
        _drag : function(e) {
            var oElem = DragHandler._oElem;

            var x = parseInt(oElem.style.left);
            var y = parseInt(oElem.style.top);

            e = e ? e : window.event;

            var tmpX = x + (e.clientX - oElem.mouseX);
            var tmpY = y + (e.clientY - oElem.mouseY);

            if(tmpX<=0){tmpX = 0;}
            if(tmpY<=0){tmpY = 0;}


            oElem.style.left = tmpX + 'px';
            oElem.style.top  = tmpY + 'px';

            oElem.mouseX = e.clientX;
            oElem.mouseY = e.clientY;

            oElem.drag(oElem, x,y);

            return false;
        },

        // private method. Stop drag process.
        _dragEnd : function() {
            var oElem = DragHandler._oElem;

            var x = parseInt(oElem.style.left);
            var y = parseInt(oElem.style.top);

            oElem.dragEnd(oElem, x, y);

            oElem.onmousemove = null;
            oElem.onmouseup = null;
            document.onmousemove=null;
            document.onmouseup=null;
            DragHandler._oElem = null;

        }

    }

    DragHandler.attach(document.getElementById('ObjCountry'));

    </script>

报告
身体{
字体系列:Arial、Helvetica、无衬线字体;
字体大小:0.7em;
}
.反对{
宽度:190px;
高度:100px;
边框:1px纯黑;
边界半径:7px 7px 7px 7px;
盒影:3px 3px 2px#d2d2;
位置:绝对位置;
调整大小:
}
ObjHdr先生{
颜色:#fff;
背景#3636;
填充:3px0px 3px7px;
边界半径:6px 6px 0px 0px;;
字体大小:粗体;
光标:移动;
}
.物体{
宽度:190px;
高度:77px;
溢出:滚动;
}
ObjEle先生{
填充:1px 0px 1px 4px;
颜色:#000;
边框底部:1px纯黑;
光标:指针;
}
国家
印度
中国
美国
伊朗
伊拉克
印度尼西亚
var DragHandler={
//私有财产。
_oElem:null,
//公共方法。将拖动处理程序附加到元素。
附件:功能(oElem){
oElem.onmousedown=DragHandler.\u dragBegin;
//回调
oElem.dragBegin=新函数();
oElem.drag=新函数();
oElem.dragEnd=新函数();
返回oElem;
},
//私有方法。开始拖动过程。
_dragBegin:函数(e){
var oElem=DragHandler.\u oElem=this;
if(isNaN(parseInt(oElem.style.left)){oElem.style.left='0px';}
if(isNaN(parseInt(oElem.style.top)){oElem.style.top='0px';}
var x=parseInt(oElem.style.left);
var y=parseInt(oElem.style.top);
e=e?e:window.event;
oElem.mouseX=e.clientX;
oElem.mouseY=e.clientY;
德拉格贝金(oElem,x,y);
//document.onmousemove=DragHandler.\u拖动;
document.onmouseup=DragHandler.\u dragEnd;
oElem.onmousemove=DragHandler.\u拖动;
oElem.onmouseup=DragHandler.\u dragEnd;
返回false;
},
//私有方法。拖动(移动)元素。
_拖动:函数(e){
var oElem=DragHandler.\u oElem;
var x=parseInt(oElem.style.left);
var y=parseInt(oElem.style.top);
e=e?e:window.event;
var tmpX=x+(e.clientX-oElem.mouseX);
var tmpY=y+(e.clientY-oElem.mouseY);

如果(tmpX这是因为,拖动适用于整个div,包括滚动条。因为它是在鼠标向下时调用的,所以在单击滚动条时也会调用它。

-在draghandler中创建一个新方法,该方法只调用DragendPrivate方法 -创建一个mousedown事件到id=“ObjHdr”-它开始拖动 -创建一个mouseup事件,以id=“ObjHdr”-结束拖动

进入德拉甘德勒: detach:function(oElem){oElem.onmousedown=DragHandler.\u dragEnd;return oElem;}

document.getElementById(“ObjHdr”).onmousedown=“DragHandler.attach(document.getElementById(“ObjCountry”);” document.getElementById(“ObjHdr”).onmouseup=“DragHandler.detach(document.getElementById(“ObjCountry”);”

结果: 拖放事件仅在单击标题时开始,并在鼠标悬停时结束。 如果您尝试单击“ObjBody”,则不执行任何操作-不会启动任何拖动进程

问候 奥兹