小米技术社区
小米技术社区管理员 关于小米

27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]

E-mail:mzze@163.com

Q Q:32362389

W X:xiaomi168527

小米技术社区大牛王飞 关于王飞

27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]

E-mail:wf_live@126.com

Q Q:3940019

微博:王小贱ss

小米技术社区设计小艳 关于小艳

大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]

E-mail:97157726@qq.com

Q Q:97157726

标签云
精品推荐
  • 什么是闭包?js闭包的2个最大用途以及注意事项

    什么是闭包?js闭包的2个最大用途以及注意事项

    各种专业文献上的"闭包"(closure)定义非常抽象,很难看懂。简单的说,闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因……
    199人已经看过了
您的位置:首页 > 前端开发 > Javascript > 原生JS

JavaScript事件的常见类型、案例、绑定和传播

分类: 原生JS33个赞

JavaScript事件的常见类型

页面事件(资源事件)
事件名称何时触发
焦点事件
load一个资源及其相关资源已完成加载。window.onload=function()
focus元素获得焦点
blur元素失去焦点
鼠标事件
mouseenter指针移到有事件监听的元素内
mouseover指针移到有事件监听的元素或者它的子元素内
mousemove指针在元素内移动时持续触发
mousedown在元素上按下任意鼠标按钮
mouseup在元素上释放任意鼠标按键
click在元素上按下并释放任意鼠标按键
dblclick在元素上双击鼠标按钮
contextmenu右键点击 (右键菜单显示前).
mouseleave指针移出元素范围外(不冒泡)
mouseout指针移出元素,或者移到它的子元素上
select文本被选中(input标签、textarea标签)
copy元素内容被拷贝时
键盘事件
keydown按下任意按键
keypress除 Shift, Fn, CapsLock 外任意键被按住. (连续触发)
keyup释放任意按键
form表单事件
reset点击重置按钮时 (``)
submit点击提交按钮
内容变化事件
change当内容改变且失去焦点时触发 (存储事件)
input当内容改变时触发 (值变化事件)

调用方式

var d = document.getElementById('d'); //是谁
    d.onmouseenter = function(){ //什么时候干
     console.log('enter'); //干什么
    }

注意:

(1)mouseenter   mouseleave  不区分子元素(鼠标从父元素移动到子元素,不触发)

(2)绑定事件用动态绑定都加上on,如onmouseenter,如果用事件监听方式绑定则不用加on

拓展:JavaScript事件绑定的三种方法

(3)js中绑定事件,其实是将函数 赋值给了标签对象的一个方法

绑定事件案例1:点击下载只下载一次

HTML

<input type="button" value="下载" id="btn">

JS

<script type="text/javascript">
    需求,下载按钮只能点一次
    获取标签
    var btn = document.getElementById('btn');
    绑定事件
    btn.onclick = function(){
     //具体的处理
     console.log('正在下载中...');
     //移除事件
     btn.onclick = '';
    }

    function fn(){
     //具体的处理
     console.log('正在下载中...');
     //移除事件
     btn.removeEventListener('click', fn);
    }
    btn.addEventListener('click', fn);
</script>

绑定事件案例2:点击所有图片变大

HTML

<div>
	<img src="img/1.jpg">
	<img src="img/2.jpg">
	<img src="img/3.jpg">
	<img src="img/4.jpg">
</div>

JS

// 批量绑定事件    
	//给每个图片加上事件,点击弹出对话框    
	var imgs = document.querySelectorAll('img');    
	// console.log(imgs);    
	// 遍历数组    
	for(var i=0; i<imgs.length; i++){    
		//给每一个img标签绑定单击事件    
		// console.log(imgs[i]);    
		imgs[i].onclick = function(){    
			// alert('点我干啥');    
			// 将图片放大  css  width : 800px    
			// this 代表点击的那个img标签    
			this.style.width = '800px';    
		}    
	}


事件的传播

在JS中当一个事件发生执行以后,它会在不同的DOM节点之间传播。

简单理解:一个大DIV里面有几个子DIV,都做同样的事件的执行顺序是从内到外,即冒泡阶段.,js的执行基本都是冒泡阶段

事件的传播原理图

事件传播的阶段

这种传播分成三个阶段:

第一阶段:从window对象传导到目标节点,称为 捕获阶段

第二阶段:在目标节点上触发,称为 目标阶段

第三阶段:从目标节点传导回window对象,称为 冒泡阶段


事件的传播的顺序

事件传播的最上层对象是window;

事件的传播顺序,在捕获阶段依次为window、document、html、body、div;

在冒泡阶段依次为div、body、html、document、window。


注意: 三种事件绑定方式全部 默认 监听冒泡阶段事件;

  1. 行内绑定 2.动态绑定 3.addEventListener监听绑定


冒泡事件案例:

//冒泡事件 (在冒泡阶段执行的事件,从内向外依次执行)    
	document.getElementById('div1').onclick = function(){    
		alert('为什么点我--div1');    
	}    
	document.getElementById('div2').onclick = function(){    
		alert('为什么点我--div2');    
	}    
	document.getElementById('div3').onclick = function(){    
		alert('为什么点我--div3');    
	}

冒泡阶段转捕获阶段的方法

捕获阶段很少用,大部分都是冒泡事件

只能以事件监听的方式才能做到,给addEventListener添加第三个参数true,默认可不添加为false

document.getElementById('div1').addEventListener('click', function(){
	 	alert('为什么点我--div1');
	 }, true);


小米技术社区

本站内容均为小米原创,转载请注明出处:小米技术社区>> JavaScript事件的常见类型、案例、绑定和传播