JavaScript事件小练习——div随着鼠标移动

一、页面未出现滚轮时

1.1效果图

在这里插入图片描述
红方块在网页中随鼠标移动
总体实现思路:将鼠标的坐标赋值为div属性,改变div坐标属性值

1.2实现代码

1.CSS及div代码

<style type="text/css">
	#box1{
		width: 100px;
		height: 100px;
		background-color: red;
		/**
		 * 开启box1绝对定位,脱离文档流
		 * 这样box1才能移动
		 */
		position: absolute; 
	}
</style>

<body>
		<div id="box1"></div>
</body>

2.JS代码

<script type="text/javascript">
	window.onload=function(){
		//获取box1对象
		var box1=document.getElementById("box1");

		//为整个文档绑定鼠标事件
		document.onmousemove=function(event){
			//解决浏览器兼容问题
			event = event || window.event;
			
			//获取鼠标坐标
			var left = event.clientX;
			var top = event.clientY;

			//设置Div偏移量,相对于整个页面
			box1.style.left=left+"px";
			box1.style.top = top+"px";
		}
    }
</script>

二、当页面出现滚轮时

2.1关于滚轮有关知识

什么时候页面出现滚轮

  • 当实际页面大于显示页面
  • 好比在写这篇博客时,内容有点多,整个内容页面大于当前显示页面,出现滚轮

用图解释该例子
在这里插入图片描述
红色为显示窗口,蓝色为内容窗口

滚轮滑动时出现问题

  • 鼠标相对于显示窗口为原点
  • div相对于内容窗口为原点

如何解决看下面:

2.2代码实现(浏览器兼容问题)

1.IE8及以上 谷歌,火狐浏览器
  • pageX和pageY可以获取相对于当前页面的坐标

具体代码
body代码

<body style="height: 1000px; width: 1200px;">
	<div id="box1"></div>
</body>

通过设置内联样式让页面出现滚轮

JS代码实现效果

<script type="text/javascript">
	window.onload=function(){
		//获取box1对象
		var box1=document.getElementById("box1");

		//为整个文档绑定鼠标事件
		document.onmousemove=function(event){
			//解决浏览器兼容问题
			event = event || window.event;
			
			//IE8及以上 谷歌,火狐浏览器
			//获取鼠标坐标
			var left = event.pageX;
			var top = event.pageY;

			//设置Div偏移量,相对于整个页面
			box1.style.left=left+"px";
			box1.style.top = top+"px";
		}
    }
</script>
2.兼容IE8找一个所有浏览器通用的方法

办法要点:div偏移量=鼠标偏移量+滚轮滑动距离

具体代码
Body及CSS代码都不变

JS代码

<script type="text/javascript">
	window.onload=function(){
		//获取box1对象
		var box1=document.getElementById("box1");

		//为整个文档绑定鼠标事件
		document.onmousemove=function(event){
			//解决浏览器兼容问题
			event = event || window.event;
			
			//获取滚动条滚动的距离
			/*
			* 谷歌浏览器认为浏览器的滚动条是body的,可以通过body.scrollTop来获取
			* 火狐浏览器认为浏览器的滚动条是html的
			*/
			var st = document.body.scrollTop ||document.documentElement.scrollTop;
			var sl = document.body.scrollLeft ||document.documentElement.scrollLeft;
			
			//client为显示窗口坐标
			var left = event.clientX;
			var top = event.clientY;
			
			//设置div的偏移量
			box1.style.left = left+sl+"px";
			box1.style.top = top+st+"px";

		}
    }
</script>
发布了198 篇原创文章 · 获赞 94 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/shang_0122/article/details/104879569
今日推荐