JavaScript事件

事件基础

  JavaScript 事件是由访问 Web 页面的用户引起的一系列操作。
  当用户执行某些操作的时候,再去执行一系列代码。或者用来获取事件的详细信息,如鼠标位置、键盘按键等。

事件处理函数

  javaScript可以处理的事件类型为:鼠标事件、键盘事件、HTML事件
  所有的事件处理函数都会都有两个部分组成,on + 事件名称,函数体

1、鼠标事件

onclick      用户单击鼠标按钮或按下回车键时触发
ondblclick   用户双击主鼠标按钮时触发

onmousedown  用户按下鼠标还未弹起时触发
onmouseup    用户释放鼠标按钮时触发
// onm ousedown和onmouseup可看做是单击鼠标事件的分解动作

onmouseover  鼠标移到某个元素上方时触发
onmouseout   鼠标移出某个元素上方时触发
onmousemove  鼠标指针在元素上移动时触发

onmouseenter  onm ouseleave
也是鼠标移入移出事件,但不支持事件冒泡

2、HTML事件

onload       页面或者资源完全加载后在 window 上面触发,
	或框架集加载完毕后在框架集上触发。

onselect     用户选择文本框(input 或 textarea)中的一个或多个字符触发
onchange     文本框(input 或 textarea)内容改变且失去焦点后触发

onfocus      页面或者元素获得焦点时在 window 及相关元素上面触发	
onblur       页面或元素失去焦点时在 window 及相关元素上触发

onsubmit     用户点击提交按钮在<form>元素上触发
onreset      用户点击重置按钮在<form>元素上触发

onresize     窗口或框架的大小变化时在 window 或框架上触发
onscroll     用户滚动带滚动条的元素时触发

3、键盘事件

onkeydown    用户按下键盘上任意键触发,如果按住不放,会重复触发
onkeypress   用户按下键盘上的字符键触发,如果按住不放,会重复触发
onkeyup      用户释放键盘上的键触发

组合键ctrkey、altkey、shiftkey
altKey属性,bool类型,表示发生事件的时候alt键是否被按下
ctrlKey属性,bool类型,表示发生事件的时候ctrl键是否被按下
shiftKey属性,bool类型,表示发生事件的时候shift键是否被按下

keyCode/which兼容  获取用户按下键盘的哪个键

贪吃蛇小案例:通过键盘上下左右键控制div的移动

<div id="outer">
	<div id="box"></div>
</div>
<script type="text/javascript">
	var oBox = document.getElementById("box");
	document.onkeydown = function(e){
		var evt = e || window.event;
		switch(evt.keyCode){
			case 37:  // 左移
				oBox.style.left = oBox.offsetLeft-20+"px";
				break;
			case 38:  // 上移
				oBox.style.top = oBox.offsetTop-20+"px";
				break;
			case 39:  // 右移
				oBox.style.left = oBox.offsetLeft+20+"px";
				break;
			case 40:  // 下移
				oBox.style.top = oBox.offsetTop+20+"px";
				break;
		}
	}
</script>

事件对象

当触发某个事件时,会产生一个事件对象,这个对象包含着所有与事件有关的信息。
包括导致事件的元素、事件的类型、以及其它与特定事件相关的信息。

通过事件绑定的执行函数是可以得到一个隐藏参数的 。
说明,浏览器会自动分配一个参数,这个参数其实就是 event 对象。

兼容性代码获取事件对象
oBox.onclick = function(e){
	var evt = e || window.event;
}

// 距离可视区域的左边距距离,上边距距离
console.log(evt.clientX,evt.clientY);
				
// 距离页面的左边距距离,上边距距离
console.log(evt.pageX,evt.pageY);
				
// 距离事件源的左边距距离,上边距距离
console.log(evt.offsetX,evt.offsetY);
		
// 距离电脑显示屏幕的左边距距离,上边距距离
console.log(evt.screenX,evt.screenY);

事件冒泡

事件流 事件的传播顺序
事件源 直接触发某个事件的DOM对象
冒泡 事件由最特定的目标到最不特定的目标的一个传播过程

<div id="outer">
	<div id="inner"></div>
</div>
<script type="text/javascript">
	var outer = document.getElementById("outer");
	var inner = document.getElementById("inner");
	document.onclick = function(e){
		var evt = e || event;
		// 得到事件源
		console.log(evt.target || evt.srcElement);

		//兼容性的写法
		if(evt.stopPropagation){
			//针对于现代浏览器的
			evt.stopPropagation();
		}else{
			//最初是针对于IE
			evt.cancelBubble = true;
		}		
	}
</script>
上一篇:Vue+element 需要用到拖拽组件 vuedraggable


下一篇:Firefox不支持对Event对象的直接访问的简单解决办法