前端js的event光标事件实现div方块移动

2023-11-03

方法一:普通做法


<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>移动的方块</title>
		<style>
			#div{width: 100px; height: 100px; background: deeppink; position: absolute;top:100px;left:100px;}
		</style>
	</head>
	<body style="height:2000px;">
		<div id="div"></div>
		<script>
			var oDiv = document.getElementById('div');
			oDiv.onmousedown = function(ev){
				var ev = ev || window.event;
				console.log(ev.clientX+'$$'+ev.clientY);
				//获取方块在页面的位置
				disX = ev.clientX - oDiv.offsetLeft;
				disY = ev.clientY - oDiv.offsetTop;
				console.log(disX);
				console.log(disY);
				//鼠标移动
				document.onmousemove = function(ev){
					var ev = ev || window.event;
					var x = ev.pageX - disX;
					var y = ev.pageY - disY;
					oDiv.style.top = (y)+'px';
					oDiv.style.left = (x)+'px';
				}
				//鼠标抬起时,鼠标移动事件不生效
				document.onmouseup = function(){
					document.onmousemove = null;
					document.onmouseup = null;
				}
			}
		</script>
	</body>
</html>

方法二:以下这个方法我认为更好(我测试过)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<style>
    .div{
        width:100px;
        height:100px;
        background: yellow;
        position: fixed;
        left:10px;
        top:10px;
    }
</style>
<div class="div" id="showDragTableId"></div>
<script>
    var aaaa = document.getElementById("showDragTableId");
    aaaa.onmousedown = function(e){
        e = e?e:window.event;    //因为兼容问题
        let startX;
        let startY;
        let moveSwitch = true;
        let currentLeft;
        let currentTop;
        e.stopPropagation();
        startX = e.clientX;
        startY = e.clientY;
        currentLeft =  document.getElementById("showDragTableId").offsetLeft;  //通过对象获取对象的坐标
        currentTop =  document.getElementById("showDragTableId").offsetTop;
        document.onmousemove = function(e){
            e.stopPropagation();
            if(moveSwitch){
                var x = e.clientX;        //e.clientX是一个触摸事件,即是鼠标点击时的X轴上的坐标
                var y = e.clientY;        //e.clientY是一个触摸事件,即是鼠标点击时的Y轴上的坐标
                var distanceX = x-startX;    //X轴上获得移动的实际距离
                var distanceY = y-startY;     //Y轴上获得移动的实际距离
                console.log(distanceX,distanceY);
                document.getElementById("showDragTableId").style.left = distanceX+currentLeft+"px";
                document.getElementById("showDragTableId").style.top = distanceY+currentTop+"px";
            }
        };
        document.onmouseup = function(e){
            e.stopPropagation();
            moveSwitch = false;
            document.onmousemove = null;
            document.onmouseup = null;
        }
    }
</script>
</body>
</html>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端js的event光标事件实现div方块移动 的相关文章

  • Java的内部类

    学习笔记 内部类 内部类访问特点 1 内部类可以直接访问外部类中的成员 2 外部类要访问内部类 必须建立内部类的对象 一般用于类的设计 分析事物时 发现该事物描述中还有事物 而且这个事物还在访问被描述事物的内容 这时就是 还有的事物 定义成

随机推荐