loading...

1

拖拽

javascript读完大概需要9分钟

  • 发布时间:2017-10-02 17:05 星期一
  • 刘伟波
  • 244
  • 更新于2017-10-02 17:05 星期一

1.手机端拖拽

<div id="div" style="width:100px;height:100px;background-color:red;position:absolute;"></div>

 <script>

  var div = document.getElementById('div');

  var oStyle = div.currentStyle? div.currentStyle : window.getComputedStyle(div, null);

  div.addEventListener('touchmove', function(event) {

  event.preventDefault();//阻止其他事件

  // 如果这个元素的位置内只有一个手指的话

  if (event.targetTouches.length == 1) {

   var touch = event.targetTouches[0];  // 把元素放在手指所在的位置

   div.style.left = touch.pageX -parseInt(oStyle.width)/2+ 'px';

  div.style.top = touch.pageY -parseInt(oStyle.height)/2+ 'px';

   }

  }, false);

 </script>




2.pc端

 <style type="text/css">

#box{position:absolute; left:100px; top:100px; padding:5px; background:#f0f3f9; font-size:12px; -moz-box-shadow:2px 2px 4px #666666; -webkit-box-shadow:2px 2px 4px #666666;}

#main{border:1px solid #a0b3d6; background:white;}

#bar{line-height:24px; background:#beceeb; border-bottom:1px solid #a0b3d6; padding-left:5px; cursor:move;}

#content{width:420px; height:250px; padding:10px 5px;}

</style>


 <div id="box">

  <div id="main">

      <div id="bar">拖拽</div>

        <div id="content">

          内容……

        </div>

    </div>

</div>



<script>

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]; 

};

//拖拽的实现

var startDrag = function(bar, target, callback){

if(getCss(target, "left") !== "auto"){

params.left = getCss(target, "left");

}

if(getCss(target, "top") !== "auto"){

params.top = getCss(target, "top");

}

//o是移动对象

bar.onmousedown = function(event){

params.flag = true;

if(!event){

event = window.event;

//防止IE文字选中

bar.onselectstart = function(){

return false;

}  

}

var e = event;

params.currentX = e.clientX;

params.currentY = e.clientY;

};

document.onmouseup = function(){

params.flag = false;

if(getCss(target, "left") !== "auto"){

params.left = getCss(target, "left");

}

if(getCss(target, "top") !== "auto"){

params.top = getCss(target, "top");

}

};

document.onmousemove = function(event){

var e = event ? event: window.event;

if(params.flag){

var nowX = e.clientX, nowY = e.clientY;

var disX = nowX - params.currentX, disY = nowY - params.currentY;

      var _left=parseInt(params.left) + disX;

      var _top=parseInt(params.top) + disY;

      var _width=document.body.clientWidth-parseInt(getCss(target, "width"));

      var _height=document.documentElement.clientHeight-parseInt(getCss(target, "height"));

   

        //碰撞检测

       _left<1 && (_left=0);

      _left>_width && (_left=_width);

      _top<1 && (_top=0);

      _top>_height && (_top=_height);

      

     

      target.style.left = _left+ "px";

      target.style.top = _top + "px";

if (event.preventDefault) {

event.preventDefault();

}

return false;

}

if (typeof callback == "function") {

callback(parseInt(params.left) + disX, parseInt(params.top) + disY);

}

}

};

</script>

<script>

window.onload = function(){

var oBox = document.getElementById("command");

var oBar = document.getElementById("bar");

console.log(oBar)

startDrag(oBar, oBox);

};

</script>


你可能感兴趣的文章

    发表评论

    评论支持markdown,评论内容不能超过500字符,如果内容过多或者要及时回复,建议去 segmentfault平台, 也可以来我的直播间来提问。
    关于技术问题或者有啥不懂的都可以留言, 我会定期回复答疑, 也可以来 我的直播间 提问, 推荐最新仓库 前端知识体系, 感謝支持!