JavaScript之-拖拽



HTML部分:

<div class="drag">
</div>

<div class="drag" style="left:100px;top:100px;">
   <h5>点击标题拖动</h5>
</div>

CSS部分:

<style type="text/css">
*{margin:0;padding:0;}
.drag{ width:100px; height:100px; background:#000; position:absolute; color:#fff;}
.drag h5{background:blue;}
</style>

HTML和CSS部分比较简单易懂,这里就不多阐述了


JS部分:

window.οnlοad=function(){

    var obj1 = document.getElementsByTagName("div")[0];
	darg( obj1 );

	var obj2 = document.getElementsByTagName("div")[1];
	darg( obj2 , obj2.getElementsByTagName("h5")[0] );
	

	//拖拽函数
	function darg( obj ,handler){   //obj: 移动的对象 , handler:拖拽的部位
	   var handler = handler || obj ;  //handler 没传入的话,就取obj
	   this.style.cursor = "move";

	   handler.onmousedown = function(event){	         
	         var event = event || window.event ;  //兼容IE
             
			 var disX = event.clientX - obj.offsetLeft;   //鼠标距obj左边框的距离
			 var disY = event.clientY - obj.offsetTop;   //鼠标距obj上边框的距离

			 //计算窗口最大值
			 //IE不支持innerHTML,可用document.documentElement.clientWidth代替
			 var maxLeft = ( window.innerWidth || document.documentElement.clientWidth ) - obj.offsetWidth; 
			 var maxTop = ( window.innerHeight || document.documentElement.clientHeight ) - obj.offsetHeight;
			 
			 document.onmousemove = function(event){
			      var event = event || window.event ;

				  var	curLeft = event.clientX - disX; 
				  var curTop = event.clientY - disY;
                  
				  curLeft < 0 && ( curLeft=0 ); //&& 运算 , 相当于 if(curLeft<0){ curLeft=0 }
				  curTop < 0 && ( curTop=0 );
				 
				  curLeft > maxLeft && ( curLeft = maxLeft );
				  curTop > maxTop && ( curTop = maxTop );

				  obj.style.left = curLeft + "px";
				  obj.style.top = curTop + "px";
				  return false;
			 }

			 document.onmouseup = function(){
			     document.onmousemove = null;  //设为 null 是为防止内存泄露
				 document.onmousedown = null;
				 this.releaseCapture && this.releaseCapture(); //释放鼠标捕获
			 } 
             this.setCapture && this.setCapture();  //鼠标捕获 (注1)
			 return false;
	   }
	}
}




注1:
  鼠标捕获:鼠标所有事件都针对该对象,即使鼠标不在浏览器窗口内。
  (鼠标移出窗口试试,div依然随着鼠标移动)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值