美文网首页
JavaScript - 实现dom元素拖拽

JavaScript - 实现dom元素拖拽

作者: wwmin_ | 来源:发表于2017-06-08 15:35 被阅读221次
  • 被移动元素必须为绝对定位
    position:absolute;
  • Dom
 <div class = "move-container" >
      <div class = "move" style="position:absolute; width:100px; height:100px; background:gray">
      </div>
  </div> 
  • Javasrtipt
var moveElem = document.querySelector('.move'); //待拖拽元素      

var dragging; //是否激活拖拽状态
var tLeft, tTop; //鼠标按下时相对于选中元素的位移

//监听鼠标按下事件
document.addEventListener('mousedown', function(e) {
    if (e.target == moveElem) {
        
        dragging = true; //激活拖拽状态
       var moveElemRect = moveElem.getBoundingClientRect();
        tLeft = e.clientX - moveElemRect.left; //鼠标按下时和选中元素的坐标偏移:x坐标
        tTop = e.clientY - moveElemRect.top; //鼠标按下时和选中元素的坐标偏移:y坐标
    }
});

//监听鼠标放开事件
document.addEventListener('mouseup', function(e) {
    dragging = false;
});

//监听鼠标移动事件
document.addEventListener('mousemove', function(e) {
    if (dragging) {
        var moveX = e.clientX - tLeft, 
              moveY = e.clientY - tTop;

        moveElem.style.left = moveX + 'px';
        moveElem.style.top = moveY + 'px';
      
    }
});

下面是一个封装好的函数

  • 封装拖拽函数
var funDrag = function(element, callback) {
    callback = callback || function() {};
    var params = {
        left: 0,
        top: 0,
        currentX: 0,
        currentY: 0,
        flag: false
    };
    //获取相关CSS属性
    var getCss = function(o,key){
        return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,false)[key];     
    };
    
    //拖拽的实现
    if(getCss(element, "left") !== "auto"){
        params.left = getCss(element, "left");
    }
    if(getCss(element, "top") !== "auto"){
        params.top = getCss(element, "top");
    }
    //o是移动对象
    element.onmousedown = function(event){
        params.flag = true;
        event = event || window.event;
        params.currentX = event.clientX;
        params.currentY = event.clientY;
    };
    document.onmouseup = function(){
        params.flag = false;    
        if(getCss(element, "left") !== "auto"){
            params.left = getCss(element, "left");
        }
        if(getCss(element, "top") !== "auto"){
            params.top = getCss(element, "top");
        }
        callback();
    };
    document.onmousemove = function(event){
        event = event || window.event;
        if(params.flag){
            var nowX = event.clientX, nowY = event.clientY;
            var disX = nowX - params.currentX, disY = nowY - params.currentY;
            element.style.left = parseInt(params.left) + disX + "px";
            element.style.top = parseInt(params.top) + disY + "px";
        }
    }    
};

相关文章

  • JavaScript - 实现dom元素拖拽

    被移动元素必须为绝对定位position:absolute; Dom Javasrtipt 下面是一个封装好的函数...

  • HTML5实现拖拽

    实现拖拽效果源元素 - 要拖拽的文件目标元素 - 要拖拽到哪里去 目前实现拖拽效果使用原生DOM就能实现 - 最麻...

  • HTML5拖拽drag

    通过拖拽实现页面元素的位置改变 实现拖拽效果 源元素 - 要拖拽的文件 目标元素 - 要拖拽到哪里去 目前实现拖拽...

  • 一些常用判断JQuery与原生javascript实现区别

    一、判断 DOM 下是否存在某个元素 Javascript 实现: if(document.getElementB...

  • DOM (javascript DOM节点操作)

    DOM (javascript DOM节点操作) 本节目录 查找DOM元素 DOM节点操作 javascript操...

  • 拖拽API

    实现拖拽效果 目前实现拖拽效果 HTML5拖拽 源元素事件例子 目标元素事件 从本地拖放图片到页面中 实现拖拽

  • 专辑篇:JS HTML DOM

    JavaScript HTML DOM 通过HTML DOM,可以访问JavaScript HTML文档的所有元素...

  • 02-JQuery操作DOM

    一、JS获取DOM元素和JQuery获取DOM元素的区别 JavaScript获取的是DOM对象,而Jquery获...

  • Vue小商城学习记录

    初期几天以后补 2018.6.1 用touch事件实现元素拖拽,拖拽元素不能加transition,否则拖拽结束才...

  • DOM拖拽排序(JavaScript)

    实现拖拽排序功能,废话少说,上代码 html部分 js部分 效果如下

网友评论

      本文标题:JavaScript - 实现dom元素拖拽

      本文链接:https://www.haomeiwen.com/subject/akbgfxtx.html