HTML 드래그 아날로그 대화상자

3767 단어
<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <style type="text/css" >
        html,body
        {
            height:100%;
            width:100%;
            padding:0;
            margin:0;
        }

        .dialog
        {
            width:250px;
            height:250px;
            position:absolute;
            background-color:#ccc;
            -webkit-box-shadow:1px 1px 3px #292929;
            -moz-box-shadow:1px 1px 3px #292929;
            box-shadow:1px 1px 3px #292929;
            margin:10px;
        }

        .dialog-title
        {
            color:#fff;
            background-color:#404040;
            font-size:12pt;
            font-weight:bold;
            padding:4px 6px;
            cursor:move;
        }

        .dialog-content
        {
            padding:4px;
        }
    </style>
</head>
<body>
<div id="dlgTest" class="dialog">
    <div class="dialog-title">Dialog</div>
    <div class="dialog-content">
        This is a draggable test.
    </div>
</div>
<script type="text/javascript">
    var Dragging=function(validateHandler){ // , , null
        var draggingObj=null; //dragging Dialog
        var diffX=0;
        var diffY=0;

        function mouseHandler(e){
            switch(e.type){
                case 'mousedown':
                    draggingObj=validateHandler(e);// 
                    if(draggingObj!=null){
                        diffX=e.clientX-draggingObj.offsetLeft;
                        diffY=e.clientY-draggingObj.offsetTop;
                    }
                    break;

                case 'mousemove':
                    if(draggingObj){
                        draggingObj.style.left=(e.clientX-diffX)+'px';
                        draggingObj.style.top=(e.clientY-diffY)+'px';
                    }
                    break;

                case 'mouseup':
                    draggingObj =null;
                    diffX=0;
                    diffY=0;
                    break;
            }
        };

        return {
            enable:function(){
                document.addEventListener('mousedown',mouseHandler);
                document.addEventListener('mousemove',mouseHandler);
                document.addEventListener('mouseup',mouseHandler);
            },
            disable:function(){
                document.removeEventListener('mousedown',mouseHandler);
                document.removeEventListener('mousemove',mouseHandler);
                document.removeEventListener('mouseup',mouseHandler);
            }
        }
    }

    function getDraggingDialog(e){
        var target=e.target;
        while(target && target.className.indexOf('dialog-title')==-1){
            target=target.offsetParent;
        }
        if(target!=null){
            return target.offsetParent;
        }else{
            return null;
        }
    }

    Dragging(getDraggingDialog).enable();
</script>
</body>
</html>

좋은 웹페이지 즐겨찾기