Home  >  Article  >  Web Front-end  >  JavaScript simple drag and drop mouse events mousedown, mousemove and mouseup example analysis

JavaScript simple drag and drop mouse events mousedown, mousemove and mouseup example analysis

黄舟
黄舟Original
2017-06-28 10:33:473467browse

javascriptSimple drag

Simple drag implementation

JavaScript simple drag and drop mouse events mousedown, mousemove and mouseup example analysis

##Create the drag object when mousedown and release it when mouseup Object, once the principle is clarified, it is actually very simple.

Simple drag and drop implementation code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>简单拖拽实现</title>
<style type="text/css">
*{margin:0;padding:0;}
#box{ margin:20px auto; position:relative; width:400px; height:400px; background:#ccc; border:1px solid #333; postion:relative; }
#dragBox{ width:50px; height:50px;  text-align:center; line-height: 50px;position: absolute; background:blue; cursor:move; font-size:12px; color:#fff;}
</style> 
</head>
<body>
<div id="box">
        <div id="dragBox">拖我</div>
</div>
<script type="text/javascript">
var VVG = {};  //命名空间
VVG.DOM = {
    $: function(id) { //创建方便的选择符
        return typeof id == "string" ? document.getElementById(id) : id;
    },
    bindEvent: function(node, type, func) { //事件绑定方法
        if (node.addEventListener) {
            node.addEventListener(type, func, false);
        } else if (node.attachEvent) {
            node.attachEvent("on" + type, func);
        } else {
            node["on" + type] = func;
        }
    },
    getEvent: function(event) { //获取事件
        return event ? event : window.event;
    },
    getTarget: function(event) { //获取事件目标
        return event.target || event.srcElement;
    }
}
    var DragDrop =  function() { //新建一个返回对象的函数
        var box = VVG.DOM.$("box"); //获取外围BOX
        var dragBox = VVG.DOM.$("dragBox");//获取需要拖动的BOX
        var dragging = null; //初始化对象
        function drag(event) { //事件执行函数
            event = VVG.DOM.getEvent(event); 
            var target = VVG.DOM.getTarget(event);
            switch (event.type) {//判断事件类型
            case "mousedown":
                if(target.id == "dragBox"){ //当事件对象的ID等于要拖动的BOX的ID时
                    dragging = target; //赋值到拖动目标
                }
                break;
            case "mousemove":
                if(dragging){ //当有拖动目标时执行
                    sTop = document.documentElement.scrollTop || document.body.scrollTop; //当有滚动条的时候卷去页面的高度
                    dragging.style.left = (event.clientX - box.offsetLeft - dragBox.offsetWidth/2) + "px";
                    dragging.style.top = (event.clientY + sTop - box.offsetTop  - dragBox.offsetHeight/2 ) + "px";
                    var left = parseInt(dragging.style.left);
                    var top = parseInt(dragging.style.top);
                    //console.log("left:"+left+"-----top:"+top + "-------sTop:"+sTop);
                    // 比较坐标是否超出外围的BOX
                    if(left < 0){
                        dragging.style.left = 0 +"px";
                    }
                    if(top < 0){
                        dragging.style.top = 0+"px";
                    }
                    if(left > box.offsetWidth - dragBox.offsetWidth){
                        dragging.style.left = (box.offsetWidth - dragBox.offsetWidth - 2 )+"px";
                    }
                    if(top >  box.offsetHeight - dragBox.offsetHeight){
                        dragging.style.top =( box.offsetHeight - dragBox.offsetHeight  - 2 )+"px";
                    }
                }
                break;
            case "mouseup":
                // 清空拖动目标
                dragging = null;
                break;
            }
        };
        return {
            dragStart: function() {
                // 绑定事件
                VVG.DOM.bindEvent(document, "mousedown", drag);
                VVG.DOM.bindEvent(document, "mousemove", drag);
                VVG.DOM.bindEvent(document, "mouseup", drag);
            }
        }
    }();
    DragDrop.dragStart();
</script>
</body>
</html>


The above is the detailed content of JavaScript simple drag and drop mouse events mousedown, mousemove and mouseup example analysis. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn