【JS练习】拖拽

鼠标按下事件:onmousedown
鼠标移动事件:onmousemove
鼠标松开事件:onmouseup

一个盒子,可以根据鼠标的拖拽进行移动

1.鼠标按下时开始拖拽

该事件绑定给box01

2.鼠标移动时,被拖拽元素跟着鼠标一起移动

该事件绑定给document
鼠标移动,被拖拽元素也跟着移动,根据鼠标的坐标改变被拖拽元素的坐标可以实现该功能
event.clientX 鼠标当前的x值
event.clientY 鼠标当前的y值
把这两个值分别给盒子的左边距和上边距即可

3.鼠标松开时,取消拖拽,被拖拽元素就固定在停止拖拽的位置

绑定给document,如果绑定给box01的话,当页面中有其他的块的时候,如果移动到那个块底下,无法鼠标松开的事件,就是你在这即使鼠标松开了也没用。
就是下面这种情况:
在这里插入图片描述
所以要绑定给document,无论在网页的哪个地方,我松开都有用。

代码:
<script>
			window.onload=function(){
				
				var box01=document.getElementById("box01");
				//1.给box1绑定一个鼠标按下事件
				box01.onmousedown=function(){
					// alert("鼠标在box1中按下");
					//2.鼠标移动时,对box1进行拖拽,即改变方块所在位置
					//如果给box绑定,只能向下移动,往上就出去了,所以要给document绑定
					document.onmousemove=function(event){
						// alert("开始拖拽");
						event=event||window.event;
						var left=event.clientX;
						var top=event.clientY;
						box01.style.left=left+"px";
						box01.style.top=top+"px";
						
					}
					//3.鼠标松开时,被拖拽元素固定在放下的位置
					//如果用box01的话,如果存在别的块,就无法取消拖拽事件了,所以要给document绑定
					//不管在哪松,都可以松掉
						document.onmouseup=function(event){
							//取消鼠标移动和鼠标按下的的事件
						document.onmousemove=null;
						//完成拖拽之后,取消掉鼠标松开事件,不然点别的地方其实还是会触发鼠标松开事件
						document.onmouseup=null;
					}
				}
			}
		</script>
有几个改进的地方:

1.鼠标永远在拖拽元素的左上角
在这里插入图片描述
减去偏移量
注意这个偏移量是在块没有移动之前计算的 一旦开始移动 就变成灰色的那个client.clientX了

box01.onmousedown = function() {
						var lp=event.clientX-box01.offsetLeft;
						var tp=event.clientY-box01.offsetTop;
						
					document.onmousemove = function(event) {
						event = event || window.event;		
									
						var left = event.clientX-lp;
						var top = event.clientY-tp;
						
						box01.style.left = left + "px";
						box01.style.top = top + "px";
					}

这样就是点击哪里拖,鼠标就一直在那,不会跑到左上角了。
2. 如果有其他的需要拖拽的元素 希望点击它也可以实现拖拽的功能
解决办法:封装成函数

window.onload = function() {

				var box01 = document.getElementById("box01");
				var box02 = document.getElementById("box02");
				drag(box01);
				drag(box02);
				function drag(obj) {
					obj.onmousedown = function() {
	
						var lp = event.clientX - obj.offsetLeft;
						var tp = event.clientY - obj.offsetTop;
						document.onmousemove = function(event) {
							event = event || window.event;

							var left = event.clientX - lp;
							var top = event.clientY - tp;
							obj.style.left = left + "px";
							obj.style.top = top + "px";
						}
						document.onmouseup = function(event) {
							document.onmousemove = null;
							document.onmouseup = null;
						}
					}
				}
			}

这样,使用的时候只需要调用drag拖拽函数就可以了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值