关于移动端拖拽

Posted

tags:

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

移动端碰撞检测

function drag(obj1,obj2,success){
  obj1.addEventListener("touchstart", function(e) {
  var touches = e.touches[0];
  window.disX= touches.clientX - obj1.offsetLeft;
  window.disX= touches.clientY - obj1.offsetTop;
  //阻止页面的滑动默认事件
  document.addEventListener("touchmove",defaultEvent,false);
  },false)

  obj1.addEventListener("touchmove", function(e) {
    var touches = e.touches[0];
    var oLeft = touches.clientX - disX;
    var oTop = touches.clientY - disX;
    if(oLeft < 0) {
      oLeft = 0;
    }else if(oLeft > document.documentElement.clientWidth - obj1.offsetWidth) {
      oLeft = (document.documentElement.clientWidth - obj1.offsetWidth);
    }
    if(oTop < 0) {
      oTop = 0;
    }else if(oLeft > document.documentElement.clientHeight - obj1.offsetHeight) {
      oTop = (document.documentElement.clientHeight - obj1.offsetHeight);
    }
    obj1.style.left = oLeft + "px";
    obj1.style.top = oTop + "px";
  },false);

  obj1.addEventListener("touchend",function() {
    document.removeEventListener("touchmove",defaultEvent,false);
    var l1=obj1.offsetLeft;
    var r1=l1+obj1.offsetWidth;
    var t1=obj1.offsetTop;
    var b1=t1+obj1.offsetHeight;

    var l2=obj2.offsetLeft;
    var r2=l2+obj2.offsetWidth;
    var t2=obj2.offsetTop;
    var b2=t2+obj2.offsetHeight;

    if (l2>r1 || l1>r2 || t1>b2 || t2>b1){
      obj2.style.background=‘green‘;
    }
    else{
      success&&success()
    }
  },false);
  function defaultEvent(e) {
    e.preventDefault();
  }
}

pc版本

window.onload=function (){
  var oDiv1=document.getElementById(‘div1‘);
  var oDiv2=document.getElementById(‘div2‘);
  function drag(obj1,obj2,success){
    obj1.onmousedown=function (ev){
      var oEvent=ev || event;
      var disX=oEvent.clientX-obj1.offsetLeft;
      var disY=oEvent.clientY-obj1.offsetTop;

      document.onmousemove=function (ev){
        var oEvent=ev || event;
        var left=oEvent.clientX-disX;
        var top=oEvent.clientY-disY;

        obj1.style.left=left+‘px‘;
        obj1.style.top=top+‘px‘;

        var l1=obj1.offsetLeft;
        var r1=l1+obj1.offsetWidth;
        var t1=obj1.offsetTop;
        var b1=t1+obj1.offsetHeight;

        var l2=obj2.offsetLeft;
        var r2=l2+obj2.offsetWidth;
        var t2=obj2.offsetTop;
        var b2=t2+obj2.offsetHeight;

        if (l2>r1 || l1>r2 || t1>b2 || t2>b1){
          obj2.style.background=‘green‘;
        }
        else{
          success()
        }
       };
      document.onmouseup=function (){
        document.onmousemove=null;
        document.onmouseup=null;
      };
    return false;
    };
  }
  drag(oDiv1,oDiv2,function(){
    oDiv2.style.background="yellow"
  })
};

以上是关于关于移动端拖拽的主要内容,如果未能解决你的问题,请参考以下文章

移动端拖拽

pc端移动端拖拽实现

移动端拖拽(模块化开发,触摸事件,webpack)

React之卡片拖拽移动

Sortable.js移动端拖拽排序的容器li标签里含有其他点击事件如何写

javascript 拖拽移动滚动条