15.JS的基础学习——15day

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

1.鼠标滚轮事件

2.键盘事件

3.方向键控制盒子移动练习

4.滚轮事件

总结


1.鼠标滚轮事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			#box1{
				width: 100px;
				height: 100px;
				background-color: red;
				
			}
			
		</style>
		
		<script type="text/javascript">
			
			window.onload = function(){
				
				/*
				 * 当鼠标滚轮向下滚动的时候,box1变长
				 * 	 当鼠标滚轮向上滚动的时候,box1变短
				 * 
				 */
				var box1 = document.getElementById("box1");
				//onmousewheel2019已经废弃这个方法
				//获取id为box1的第v
				/*
				 * onmousewheel 鼠标滚轮的滚动事件,会在滚轮的时候触发
				 * 	 但是火狐不支持该属性
				 * 
				 * 在火狐中需要使用DOMMouseScroll 来绑定事件
				 * 		注意该事件需要通过addEventListener
				 * 
				 */
		//方式一:
				//谷歌里触发的这个函数
				/*box1.onmousewheel = function(){
		
					alert("滚轮滚了~~~~");
				};
				//调用兼容浏览器的方法:在火狐里触发的这函数
				bind(box1,"DOMMouseScroll",function(){
					
					alert("滚轮滚了~~~~");
				});*/
			//但是这里两个函数,比较麻烦
		//方式二:	
			//合并为一个
				/*function fun(){
					alert("滚轮滚了~~~~");
				};
				box1.onmousewheel = fun;
				bind(box1,"DOMMouseScroll",fun);*/
		//实现业务函数:
				box1.onmousewheel = function(event){//兼容谷歌
					event = event || window.event;
					/*业务逻辑:
					 * 当鼠标滚轮向下滚动的时候,box1变长
					 * 	 当鼠标滚轮向上滚动的时候,box1变短
					 */
				//1.判断鼠标滚轮滚动的方向
					//event.wheelDelta 可以获取鼠标滚轮滚动的方向
					//向上滚120 向下滚-120
					//alert(event.wheelDelta)
					//但是:wheelDelta这个属性火狐中不支持
					
					//在火狐中使用event.detail来获取滚动的方向
					//向上滚-3 向下滚3
					//alert(event.detail);
					
					if(event.wheelDelta > 0 || event.detail < 0 ){
						//向上滚变短
						//alert("向上滚");
				//2.获取值 然后改变当前的值
						box1.style.height = box1.clientHeight - 10 + "px";
						
					}else{
						//向上滚变长
						//alert("向下滚");
						
						box1.style.height = box1.clientHeight + 10 + "px";
					}
					
					
			//3.取消浏览器的默认行为~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
				/*
				  * 但是使用addEventListener()方法绑定函数,取消默认行为时不能使用 return false
				  * 怎么解决????
				  *  	需要使用event来取消默认行为event.preventDefault();
				  * 	但是IE8不支持event.preventDefault();这个方法,如果使用会报错
				  */
					//event.preventDefault();//专门对付addEventListener的
				//解决《判断》
				event.preventDefault() && event.preventDefault();
				
		
				/*
				 * 当滚轮滚动时,如果浏览器有滚动条,滚动条随之滚动
				 * 这是浏览器的默认行为,如果不希望发生,则可以取消默认行为
				 * 
				 */
				 return false;
					
					
					
					
					
				};
					//调用兼容浏览器的方法:在火狐里触发的这函数
					bind(box1,"DOMMouseScroll",box1.onmousewheel);	 
			};
			
			
			
			//兼容火狐
			function bind(obj , eventStr , callback){
				if(obj.addEventListener){
					//大部分浏览器兼容的方式
					obj.addEventListener(eventStr , callback , false);
				}else{
					/*
					 * this是谁由调用方式决定
					 * callback.call(obj)
					 */
					//IE8及以下
					obj.attachEvent("on"+eventStr , function(){
						//在匿名函数中调用回调函数
						callback.call(obj);
					});
				}
			}
			
			
			
			
			
			
		</script>
		
		
		
	</head>
	<body style="height: 2000px;">
		<div id="box1"></div>
		
	</body>
</html>

2.键盘事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			window.onload = function(){
				
				/*
				 * 键盘事件:
				 * 		onkeydown
				 * 			- 按键被按下
				 * 			- 对于onkeydown来说如果一直按着某个键不松手,则事件会一直触发
				 * 			- 为什么当第一个按下的时候就比较慢,后面就比较快的,这样的操作就是为了防止误操作
				 * 
				 * 
				 * 
				 * 		onkeyup
				 * 			- 按键被松开
				 * 
				 * 注意:键盘事件一般都会绑定给一些可以获取到焦点的对象或者是document
				 * 
				 * 
				 * 
				 */
				
				/*document.onkeydown = function(event){
					//console.log("按键被按下");
					
					/*
					 * 可以通过keyCode来获取按键的编码
					 * 	   通过它可以判断哪个按键被按下
					 * 除了keyCode,事件对象中还提供了几个属性
					 * 	  altKey
					 * 	  ctrlKey
					 * 	  shiftKey
					 * 		  - 这三个用来判断alt ctrl shift 是否被按下
					 * 			  如果按下则返回true,否则返回false
					 */
					//判断一个y是否被按下
					//判断y和ctrl是否同时被按下
					/*if(event.keyCode === 89 && event.ctrlKey){
						
						//console.log("y被按下了");
						  console.log("y和ctrl都被按下了");
					}
					
					
					
				};*/
				
				/*document.onkeyup = function(){
					
					console.log("按键被松开");
				};*/
				
		//对input进行获取键盘事件
			
			var inputs = document.getElementsByTagName("input")[0];
			
			inputs.onkeydown = function(event){
				//浏览器兼容
				event = event || window.event;
				
				
				//console.log("键盘在input被按下");
				
				//在文本框输入内容,属于onkeydown的默认行为
				//如果onkeydown中取消了默认行为,则输入的内容,不会出现在文本框中
				//return false;
				
				//小练习:当输入数字的时候不会输入在文本框当中
					//业务逻辑:
					//1.先获取事件,传入一个event
					//2.数字48-57(我的是96-105)
					//3.方法keyCode
				if (event.keyCode >= 96 && event.keyCode <= 105) {
					
				 	return false;
				}

			};
				
				
				
				
				
				
				
				
				
				
		};
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
		</script>
	</head>
	<body>
		<!--<div id="box1" style="width: 100px; height: 100px; background-color: red;"></div>-->
		<input type="text"/>
	</body>
</html>

3.方向键控制盒子移动练习

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box1{
				width: 100px;
				height: 100px;
				background-color: red;
				position: absolute;				
				
			}
		</style>
		<script type="text/javascript">
			
			window.onload = function(){
				
				//业务逻辑:
				/* 1. 按下左键,box2向左走
				 * 2. 获取左键
				 * 3. 获取键盘事件按下onkeydown
				 * 
				 * 
				 * 上下左右38 40 37 39
				 * 
				 */
				
				var box1 = document.getElementById("box1");
				document.onkeydown = function(event){
					//兼容浏览器
					event = event || window.event;
					
					//定义一个变量来控制移动的速度
					var speed = 10;
					
					//当按下ctrl的时候,开始变速
					if(event.ctrlKey){
						
						speed = 50;
					}
					
					
					/*
					 * 37左
					 * 38上
					 * 39右
					 * 40下
					 */
				//offsetLeft 这个是它原来的值
					switch(event.keyCode){
						case 37:
							//alert("向左");
							box1.style.left = box1.offsetLeft - speed + "px";
							break;
						case 39:
							//alert("向右");
							box1.style.left = box1.offsetLeft + speed + "px";
							break;
						case 38:
							//alert("向上");
							box1.style.top = box1.offsetTop - speed + "px";
							break;
						case 40:
							//alert("向下");
							box1.style.top = box1.offsetTop + speed + "px";
							break;
						
					}
					
					
					
					
					
				};
				
				
				
				
				
				
				
			};
			
			
			
			
			
			
			
			
			
			
			
			
		</script>
	</head>
	<body>
		<div id="box1"></div>
	</body>
</html>

4.滚轮事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			
			#box1{
				width: 100px;
				height: 100px;
				background-color: red;
			}
			
		</style>
		<script type="text/javascript">
			
			window.onload = function(){
				
				
				//获取id为box1的div
				var box1 = document.getElementById("box1");
				
				//为box1绑定一个鼠标滚轮滚动的事件
				/*
				 * onmousewheel鼠标滚轮滚动的事件,会在滚轮滚动时触发,
				 * 	但是火狐不支持该属性
				 * 
				 * 在火狐中需要使用 DOMMouseScroll 来绑定滚动事件
				 * 	注意该事件需要通过addEventListener()函数来绑定
				 */
				
				
				box1.onmousewheel = function(event){
					
					event = event || window.event;
					
					
					//event.wheelDelta 可以获取鼠标滚轮滚动的方向
					//向上滚 120   向下滚 -120
					//wheelDelta这个值我们不看大小,只看正负
					
					//alert(event.wheelDelta);
					
					//wheelDelta这个属性火狐中不支持
					//在火狐中使用event.detail来获取滚动的方向
					//向上滚 -3  向下滚 3
					//alert(event.detail);
					
					
					/*
					 * 当鼠标滚轮向下滚动时,box1变长
					 * 	当滚轮向上滚动时,box1变短
					 */
					//判断鼠标滚轮滚动的方向
					if(event.wheelDelta > 0 || event.detail < 0){
						//向上滚,box1变短
						box1.style.height = box1.clientHeight - 10 + "px";
						
					}else{
						//向下滚,box1变长
						box1.style.height = box1.clientHeight + 10 + "px";
					}
					
					/*
					 * 使用addEventListener()方法绑定响应函数,取消默认行为时不能使用return false
					 * 需要使用event来取消默认行为event.preventDefault();
					 * 但是IE8不支持event.preventDefault();这个玩意,如果直接调用会报错
					 */
					event.preventDefault && event.preventDefault();
					
					
					/*
					 * 当滚轮滚动时,如果浏览器有滚动条,滚动条会随之滚动,
					 * 这是浏览器的默认行为,如果不希望发生,则可以取消默认行为
					 */
					return false;
					
					
					
					
				};
				
				//为火狐绑定滚轮事件
				bind(box1,"DOMMouseScroll",box1.onmousewheel);
				
				
			};
			
			
			function bind(obj , eventStr , callback){
				if(obj.addEventListener){
					//大部分浏览器兼容的方式
					obj.addEventListener(eventStr , callback , false);
				}else{
					/*
					 * this是谁由调用方式决定
					 * callback.call(obj)
					 */
					//IE8及以下
					obj.attachEvent("on"+eventStr , function(){
						//在匿名函数中调用回调函数
						callback.call(obj);
					});
				}
			}
			
		</script>
	</head>
	<body style="height: 2000px;">
		
		<div id="box1"></div>
		
	</body>
</html>

 


总结:前端就是在和浏览器做斗争

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值