4、JavaScript事件

JavaScript事件

1、事件介绍

1.1 内联模式(不推荐)

<button onclick="">按钮</button> 

1.2 脚本模式:

​ 脚本模式能将JS代码和HTML代码分离, 符合代码规范.

​ 使用脚本模式我们需要先获取到元素节点对象, 再针对该节点对象添加事件; 如我们可以采用多种方式来获得节点对象: getElementById(), getElementsByTagName(), getElementsByClassName()等

​ 例如:

	var box = document.getElementById('box'); 

​ 添加事件方式一 : 通过匿名函数,可以直接触发对应的代码 (推荐)

	box.onclick = function() {  //给box节点对象添加点击事件onclick         
		console.log('Hello world!'); 
	};

​ 添加事件方式二 : 通过指定的函数名赋值的方式 来执行函数

	box.onclick = func;    //注意这里不能写成
	function func() {        //给box节点对象添加点击事件onclick         
		console.log('Hello world!'); 
	};

2、事件分类

JavaScript 可以处理的事件种类有三种:鼠标事件, 键盘事件和 HTML事件.

2.1 鼠标事件

// 鼠标事件:页面所有元素都可触发鼠标事件;
// click: 当单击鼠标按钮并在松开时触发
	onclick = function() {        
		console.log('单击了鼠标'); 
	};
// dblclick: 当双击鼠标按钮时触发。
	ondblclick = function() {        
		console.log('双击了鼠标'); 
	};
// mousedown:当按下了鼠标还未松开时触发。
	onmousedown = function() {       
		console.log('按下鼠标'); 
	};
// mouseup: 释放鼠标按钮时触发。
	onmouseup = function() {        
		console.log('松开了鼠标'); 
	};
// mousemove:当鼠标指针在某个元素上移动时触发。
	onmousemove = function() {        
		console.log('鼠标移动了'); 
	};  
// mouseenter:当鼠标移入某个元素的那一刻触发。
	onmouseenter = function() {       
		console.log('鼠标移入了'); 
	}; 
// mouseleave:当鼠标刚移出某个元素的那一刻触发。
	onmouseleave = function() {        
		console.log('鼠标移出了'); 
	};

2.2 键盘事件

// 键盘事件,在键盘上按下键时触发的事件;(一般由window对象或者document对象调用)
// keydown:当用户按下键盘上某个键触发,如果按住不放,会重复触发。
	window.onkeydown = function() {        
		console.log(按下了键盘上的某个键); 
	};
// keypress:当用户按下键盘上的字符键触发,如果按住不放,会重复触发
	window.onkeypress = function() {         
		console.log('按下了键盘上的字符键'); 
	};
// keyup:当用户释放键盘上的某个键触发。
	window.onkeyup = function() {        
		console.log(松开键盘上的某个键); 
	};

2.3 HTML事件

// HTML事件,跟HTML页面相关的事件; 
// load:当页面完全加载后触发
	window.onload = function() {         
		console.log('页面已经加载完毕'); 
	};
// change:当文本框(input 或 textarea)内容改变且失去焦点后触发。
	input.onchange = function() {         
		console.log('文本框中内容改变了'); 
	};
// focus:当页面或者元素获得焦点时触发。
	input.onfocus = function() {         
		console.log('文本框获得焦点'); 
	};
// blur:当页面或元素失去焦点时触发。
	input.onblur = function() {         
		console.log('文本框失去焦点'); 
	};
// scroll:当用户滚动带滚动条的元素时触发。
	window.onscroll= function() {        
 		console.log('滚动了滚动条了'); 
	};

3、事件对象及属性

3.1 什么是事件对象

​ 事件对象(event对象)是通过事件的执行函数传入的, 但不是在所有浏览器都有值, 在IE浏览器上event对象并没有传过来, 这里我们要用window.event来获取, 而在火狐浏览器上window.event无法获取, 而谷歌浏览器支持event事件传参和window.event两种, 为了兼容所有浏览器, 我们使用以下方式来得到event事件对象:

box.onclick = function(evt){      
	var e= evt || window.event; //获取到event对象(事件对象)     
	console.log(e);
};

其中window.event中的window可以省略, 最终我们可以写成:

box.onclick = function(evt){      
	var e= evt || event; //获取到event对象(事件对象)     
	console.log(e);
};

注意: evt||event不要倒过来写

3.2 事件对象的属性:

  • button: 鼠标按键
  • clientX: 浏览器可视区域的x坐标
  • clientY: 浏览器可视区域的y坐标
  • pageX: 浏览器内容区域的x坐标(重点)
  • pageY: 浏览器内容区域的y坐标(重点)
  • screenX: 显示器屏幕的x坐标(了解)
  • screenY: 显示器屏幕的y坐标(了解)
  • offsetX: 鼠标点击的元素位置距离元素左边界的x坐标(重点)
  • offsetY: 鼠标点击的元素位置距离元素上边界的y坐标(重点)

4、事件冒泡和浏览器默认行为

4.1 事件冒泡

浏览器事件流一般有两种方式: 事件冒泡和事件捕获,常用主流浏览器都默认采用事件冒泡的传递机制;

举个事件冒泡的例子:

document.onclick=function(){       
	console.log('我是 document'); 
}; 
document.documentElement.onclick=function() {       
	console.log('我是 html'); 
}; 
document.body.onclick = function(){       
	console.log('我是 body'); 
};
document.getElementById('box').onclick=function() {       
	console.log('我是 div'); 
}; 
document.getElementsByTagName('input')[0].onclick= function(){      
	console.log('我是 input'); 
};

阻止事件冒泡

​ 但是一般我们只在指定的节点上添加事件, 而不想让其传递到下层节点触发事件, 这样我们就需要阻止事件冒泡; 阻止事件冒泡有两个方法: ( 在指定不想再继续传递事件的节点的事件执行函数中使用)

​ 1, 取消冒泡(低版本IE)

​ e.cancelBubble = true;

​ 2, 停止传播(非IE和高本版IE)

​ e.stopPropagation();

​ 例如:

	document.getElementsByTagName('input')[0].onclick = function(evt) {     
		var e = evt || window.event;  
      	// 考虑到浏览器兼容问题,可以通过下述两个方法取消事件冒泡     
		if (e.stopPropagation) {	
			e.stopPropagation();     
		} else {     	
			e.cancelBubble = true;      
		}
	};

4.2 浏览器默认行为

阻止浏览器默认行为

if (e.preventDefault) {	
	e.preventDefault();   // 非IE     
}  else {              
	e.returnValue = false;  // IE      
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值