js事件基础

1、event对象:用来获取事件的详细信息:鼠标位置,键盘位置
知识点:event.clienX:事件属性返回当事件被触发时鼠标指针向对于当前浏览器页面(客户区)的水平坐标。
event.clientY:事件属性返回当事件被触发时鼠标指针向对于当前浏览器页面(客户区)的垂直坐标。
event对象的兼容性获取方式:

<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8" />
	<title></title>
	<style>
		
	</style>
	<script>
		window.onload = function (){
			document.onclick = function(ev){
				//clientX:事件属性返回当事件被触发时鼠标指针向对于当前浏览器页面(客户区)的水平坐标。
				//clientY 事件属性返回当事件被触发时鼠标指针向对于当前浏览器页面(客户区)的垂直坐标。
				
				//alert(event.clientX+','+event.clientY);
				//event.clientX 只适用于IE,ev适用于火狐,谷歌,故获取event对象的兼容性写法:ev||event
				var oEvent = ev||event;
				alert(oEvent.clientX+','+oEvent.clientY);
			};
		};
	</script>
</head>
<body style ="border:1px solid black;">
	
</body>
</html>

2、事件冒泡:事件的传递性,从里层到外依次执行

<!--事件冒泡:-->
<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8" />
	<title></title>
	<style>
		div{
			padding:100px;
		}
	</style>
	<script>
		/**本代码会依次弹出red,green,yellow,展示了事件从里到外层依次执行*/
	</script>
</head>
<body style ="border:1px solid black;">
	<div style="background:yellow;" onclick="alert(this.style.background);"> 
		<div style="background:green;" onclick="alert(this.style.background);">
			<div style="background:red;" onclick="alert(this.style.background);">
			</div>
		</div>
	</div>
</body>
</html>

3、取消事件冒泡案例:点击按钮,展示div,点击其他区域,隐藏div
event.cancelBubble

<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8" />
	<title></title>
	<style>
		#div1{
			width:200px;
			height:200px;
			background:gray;
			display:none;
		}
	</style>
	<script>
		/**实现功能:点击按钮时,显示div,点击其他区域隐藏,用到的知识点:取消事件冒泡*/
		window.onclick = function(){
			var oDiv = document.getElementById('div1');
			var oBtn = document.getElementById('btn1');
			oBtn.onclick = function(ev){
				oDiv.style.display='block';
				alert('btn被点击了!');
				//如不取消冒泡,document事件会被顺序执行,导致div的display被设置为none
				var oEvent = ev || event;
				oEvent.cancelBubble = true;
			};
			
			
			document.onclick = function(){
				oDiv.style.display='none';
				alert('document被点击了!');
			}
		}
	</script>
</head>
<body>
	<input type="button" id="btn1" value="显示div"/>
	<div id="div1"></div>
</body>
</html>

4、设置div跟随鼠标移动
原理:设置设置div的left和top分别对应clientX和clientY
注意:如果页面有滚动条,鼠标距离页面顶部的位置实际是元素的内容向上滚动的像素数+元素到可视区顶部的距离
即:scollTop+clientY(页面无滚动条,scrollTop =0)

<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8" />
	<title></title>
	<style>
		#div1{
			width:100px;
			height:100px;
			background:red;
			position:absolute;
		}
	</style>
	<script>
		/**原理:设置div的left和top分别对应clientX和clientY
			注意:如果页面有滚动条,鼠标距离页面顶部的位置实际是元素的内容向上滚动的像素数+元素到可视区顶部的距离
			即:scollTop+clientY(页面无滚动条,scrollTop =0)
		*/
		/**可封装成公共方法*/
		function getPos(ev){
			
			//浏览器兼容,谷歌支持document.body.scrollTop
			var scrollTop = document.documentElement.scrollTop + document.body.scrollTop;
			var scrollLeft = document.documentElement.scrollLeft + document.body.scrollLeft;
			return {x:ev.clientX + scrollLeft , y:ev.clientY + scrollTop};
		};			
		
		document.onmousemove = function (ev){
			var oDiv = document.getElementById('div1');
			var oEvent = ev || event;
			var position = getPos(oEvent);
			oDiv.style.left = position.x + 'px';
			oDiv.style.top = position.y + 'px';
		};
	
	</script>
</head>
<body style="height:2000px;">
	<div id="div1"></div>
</body>
</html>

5、一串div跟随鼠标移动
原理:类似游戏老鹰捉小鸡,1、设置当前div的left = 前一个div的offsetLeft 2、设置第一个div的位置为鼠标所在的位置

<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8" />
	<title></title>
	<style>
		.display{
			width:5px;
			height:5px;
			background:red;
			position:absolute;
			
		}
	</style>
	<script>
		/**原理:设置div的left和top分别对应clientX和clientY
			注意:如果页面有滚动条,鼠标距离页面顶部的位置实际是元素的内容向上滚动的像素数+元素到可视区顶部的距离
			即:scollTop+clientY(页面无滚动条,scrollTop =0)
		*/
		/**可封装成公共方法*/
		function getPos(ev){
			
			//浏览器兼容,谷歌支持document.body.scrollTop
			var scrollTop = document.documentElement.scrollTop + document.body.scrollTop;
			var scrollLeft = document.documentElement.scrollLeft + document.body.scrollLeft;
			return {x:ev.clientX + scrollLeft , y:ev.clientY + scrollTop};
		};			
		
		document.onmousemove = function (ev){
			var oDivs = document.getElementsByTagName('div');
			//获取鼠标位置
			var oEvent = ev || event;
			var position = getPos(oEvent);
			
			for(var i=oDivs.length-1;i>0;i--){
				oDivs[i].style.left = oDivs[i-1].offsetLeft+'px';
				oDivs[i].style.top = oDivs[i-1].offsetTop+'px';
			}
			oDivs[0].style.left = position.x + 'px';
			oDivs[0].style.top = position.y + 'px';
		};
	
	</script>
</head>
<body>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
	<div class="display"></div>
</body>
</html>

6、键盘控制鼠标移动
知识点:1、键盘按下事件onkeydown;2、键盘上的每个按键都有对应的键值keyCode,如enter键=13,左键=37,右键=39
原理:获取当前按键的值,判断是否是左右键,设置div的left

<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8" />
	<title></title>
	<style>
		#div1{
			width:100px;
			height:100px;
			position:absolute;
			background:red;
		}
	</style>
	<script>
		document.onkeydown = function(ev){
			var oDiv = document.getElementById('div1');
			
			var oEvent = ev || event; 
			//获取当前键盘按键 
			//alert(oEvent.keyCode);
			//键盘左键,键盘的每个键都有固定的键值
			if(oEvent.keyCode == 37){
				oDiv.style.left=oDiv.offsetLeft -10 +'px';
			}else if (oEvent.keyCode == 39){
				//键盘右键,设置div向右移动10px
				oDiv.style.left =oDiv.offsetLeft + 10 +'px';
				
			}
		};
	</script>
</head>
<body>
	<div id="div1"></div>
</body>
</html>

7、提交留言:为文本框增加onkeydown事件,按ctrl+enter将文本框的内容放入文本域
知识点:键盘一些属性:ctrlKey,shiftKey,altKey

<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8" />
	<title></title>
	<style>
		
	</style>
	<script>
		window.onload = function(){
			var oTxt1 = document.getElementById('txt1');
			var oTxt2 = document.getElementById('txt2');
			
			oTxt1.onkeydown = function(ev){
				oEvent = ev || event;
				
				//enter键 +ctrl  
				if(oEvent.keyCode ==13 && oEvent.ctrlKey){
					//将txt1的内容放入txt2,并换行
					oTxt2.value += oTxt1.value+'\n';
					//清空txt1
					oTxt1.value='';
				}
				
			};
			
		}
		
	</script>
</head>
<body>
	<input type="text" id="txt1" />
	<br>
	<textarea rows="10" cols="20" id="txt2" ></textarea>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值