纯js实现DIV拖拽

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了纯js实现DIV拖拽相关的知识,希望对你有一定的参考价值。

写代码的时候遇到需要对绝对布局的div进行拖拽的功能,起初为了省事直接在网上扒拉了一番,看到大神张鑫旭的一篇文章《JavaScript实现最简单的拖拽效果》,便直接拿来使用(膜拜大神)。但发现这段代码使用前必须设置top和left样式属性,否则拖动时div会有跳动,而且不支持多个div的拖动。于是对代码大概修改了一番,贴在这里,以备后用,希望大神勿怪。

var startDrag = function(bar, target, callback) {
    (function(bar, target, callback) {
        var params = {
            left: 0,
            top: 0,
            currentX: 0,
            currentY: 0,
            flag: false
        };
        bar.onmousedown = function(e){
            params.flag = true;
            params.left = target.offsetLeft;
            params.top = target.offsetTop;
            if(!e){
                e = window.event;
                bar.onselectstart = function(){
                    return false;
                }
            }
            params.currentX = e.clientX;
            params.currentY = e.clientY;
        };
        bar.onmouseup = function(){
            params.flag = false;
        };
        bar.onmousemove = function(e){
            var evt = e ? e: window.event;
            if(params.flag){
                var nowX = evt.clientX, nowY = evt.clientY;
                var disX = nowX - params.currentX, disY = nowY - params.currentY;
                target.style.left = parseInt(params.left) + disX + "px";
                target.style.top = parseInt(params.top) + disY + "px";
            }

            if (typeof callback == "function") {
                callback(parseInt(params.left) + disX, parseInt(params.top) + disY);
            }
        }
    })(bar, target, callback);
};

上边的方法主要接受两个参数:第一个是点击的对象(即点击那里可以实现拖拽,例如弹出层的标题栏),第二个是拖拽的对象(例如一个弹出层)。也就是startDrag(触发拖拽对象,被拖拽对象)。详细使用方法猛戳上边链接查看。

以上是关于纯js实现DIV拖拽的主要内容,如果未能解决你的问题,请参考以下文章

原生JS实现图标图片拖拽

JS——事件详情(拖拽案例:onmousedownonmousemoveonmouseup方法)

原生拖拽太拉跨了,纯JS自己手写一个拖拽效果,纵享丝滑

js可以随意拖拽的div的实现

纯 CSS 也能实现拖拽效果?

纯 CSS 也能实现拖拽效果?(学到了!)