JS学习日记--事件

1.事件基础

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

2.事件处理函数

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

注:事件对象

  当触发某个事件时,会产生一个事件对象,这个对象包含着所有与事件有关的信息。包括导致事件的元素、事件的类型、以及其他与特定事件相关的信息。通过事件绑定的执行函数是可以得到一个隐藏参数的说明,浏览器会自动分配一个参数,这个参数就是event对象。
  event常用属性:e.clientX,e.pageX,e.offsetX
具体三种区分如下:
console.log(event.clientX,event.clientY);//可视页面边距
console.log(event.pageX,event.pageY);//页面边距
console.log(event.offsetX,event.offsetY);//点击区域边距
  以及实例 :输出当前鼠标的坐标

<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>case</title>
		
		   <script type="text/javascript">
			 
		   	window.onload=function()
			{
				oSpan=document.getElementsByTagName("span")[0];
				oDiv=document.getElementById("div1");
				oDiv.onmousemove=function()
				{
					oSpan.innerHTML=event.clientX+","+event.clientY+"px";
					
					}
					oDiv.onmouseleave=function()
					{
						oSpan.innerHTML="";
					}
			}
		   </script>
			<style type="text/css">
				#div1{
					position: relative;
					width: 600px;
					height: 600px;
					background-color: #FF0000;
				}
				span{
					position: absolute;
					width: 80px;
					height: 20px;
					bottom:0;
					background-color: aliceblue;
				}
			</style>
	</head>
	<body>
		<div id="div1">
			<span></span>
		</div>
	</body>
</html>

<1>鼠标事件

函数解释
onclick鼠标单击
onmouseover双击
onmousedown按下
onmouseup松开
ondblclick双击
onmousemove移动
onmouseout离开范围

<2>键盘事件

函数解释
onkeydown按下任意键触发
onkeypress字符键触发
onkeyup抬起触发
  • 键盘事件有三个属性:altKey、ctrKey、shiftKey,分别对应这三个键,是否被按下,以及keycode函数,可以用来检测是否按下某个键
  • 实例:把文本框内输入的内容提交到div中,用点击按钮和点击enter键两种方式都可提交。
    代码如下:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>键盘事件</title>
		<style type="text/css">
			div{
				width: 600px;
				height: 600px;
				border: 1px solid #800080;
				
			}
		</style>
		<script type="text/javascript">
			window.onload=function()
			{
				oDiv=document.getElementsByTagName("div")[0];
				oBtn=document.getElementsByTagName("input");
				oBtn[1].onclick=function()
				{
					
					oDiv.innerHTML+=oBtn[0].value;
				}
				document.onkeydown=function()
				{
					if(event.keyCode==13)
					{
						oDiv.innerHTML+=oBtn[0].value;
					}
				}
			}
		</script>
	</head>
	<body>
		<div id="div1">
			
		</div>
		<input type="text" />
		<input type="button" name="" id="" value="提交" />
	</body>
</html>

3.事件流

事件流描述的是页面接收事件的顺序
事件流的三个阶段:捕获,目标,冒泡
事件委托机制:利用事件冒泡的原理,把本应添加给某元素上的事件委托给他的父级(外层)
捕获:从最不特定到最特定(从外到内)
冒泡:从最特定到最不特定(从内到外)
【注】:可以通过函数来阻止冒泡,即本来会一层一层的冒泡输出,但是通过阻止冒泡,可以让他在某一层知乎不再输出
阻止冒泡函数:
evt.cancelBubble=true;
evt.stopPropagation();
下面是一个事件委托的例子:让新加入的标签也可以拥有事件属性

<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>事件委托</title>
		<script type="text/javascript">
			window.onload=function()
			{
				var oUl=document.getElementsByTagName("ul")[0];
				var oLi=document.getElementsByTagName("li");
				oUl.onclick=function()
				{
					if(event.srcElement.nodeName.toUpperCase()=="LI"){
						console.log(event.srcElement.innerHTML);
					}
					
				}
				for (var i=0;i<5;i++) {
					var oLi=document.createElement("li");
					oLi.innerHTML=i+1;
					oUl.appendChild(oLi);
					
				}
			}
		</script>
		<style type="text/css">
			li{
				margin: 20px;
				background-color: #FF0000;
			}
		</style>
	</head>
	<body>
		<ul>
			<li>1</li>
			<li>2</li>
			<li>3</li>
			<li>4</li>
			<li>5</li>
		</ul>
	</body>
</html>

4.事件阻止函数

  • 浏览器的默认行为:
    JavaScript事件本身所具有的属性,如a标签的跳转,Submit按钮的提交右键菜单,文本框输入等。

  • 阻止默认行为的方式
    event.preventDefault();
    event.returnValue=false;
    return false
    代码如下:

 window.onload=function()
			   {
				   var a=document.getElementsByTagName("a")[0];
				   a.onclick=function()
				   {
					   console.log("aaaa");//默认会刷新页面
					   return false;
				   }
			   }
			   //右键菜单:oncontextmenu;

5.dom2级事件

  • 添加事件监听器:addEventListener(事件名,处理函数,布尔值)//false冒泡true捕获
  • 移除事件监听器:removeEventListener(事件名,处理函数)
  • IE下事件监听器:attachEvent(事件名,处理函数) detachEvent(事件名,处理函数)
  • 【注】:普通事件在同一个对面上添加两个相同的事件,后添加的会把先添加的覆盖,而dom2级会把两个都输出
  • 【注】:经试验上面的也可以在新版ie下使用,不适用的应该只是ie8以前的ie
    示例代码:
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>DOM2级事件</title>
		<script type="text/javascript">
			/*
				添加事件监听器:addEventListener(事件名,处理函数,布尔值)//false冒泡true捕获
				移除事件监听器:removeEventListener(事件名,处理函数)
				IE下事件监听器:attachEvent(事件名,处理函数)
							   detachEvent(事件名,处理函数)
			*/
				//普通事件在同一个对面上添加两个相同的事件,后添加的会把先添加的覆盖
				//而这个会输出两个
				window.onload=function()
				{
					var oDiv1=document.getElementById("div1");
					var oDiv2=document.getElementById("div2");

					oDiv1.addEventListener("click",aaa,false);
					
					oDiv2.addEventListener("click",bbb,false);
					function aaa()
					{
						console.log("outer");
					}
					function bbb()
					{
						console.log("inner");
					}
					
				}
		</script>
		<style type="text/css">
			#div1{
				width: 400px;
				height: 400px;
				background-color: #800080;
			}
			#div2
			{
				width: 200px;
				height: 200px;
				background-color: red;
			}
		</style>
	</head>
	<body>
		<div id="div1">
			<div id="div2">
				
			</div>
		</div>
	</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为减少 js 关键词的占用,此文件只占用“c$”一个关键词; * 使用时用: c$.函数名(参数列表); 或者 c$().函数名(参数列表) * 字符串操作函数、日期操作函数、数组操作函数等,直接增加到 String、Date、Array 类里面,便于直接使用 */ /** * 获取元素,或者在DOM加载完成时执行某函数 * @param arg 此参数为字符串时,认为是 c$.getElement 的缩写,用来获取元素。用法参考 c$.getElement * 如果 arg 是 function 则认为是 c$.ready 的缩写,在dom加载完成时执行。没有此参数则返回 c$ 对象。 * @param dom 需要选择的DOM对象,默认是 window.document * @return 没有arg参数时返回 c$ 对象,arg参数是字符串时返回查询的元素,arg参数是函数时没有返回内容。 * * @example * c$("mytext") // 返回 id 或者 name 为"mytext"的元素 * c$("#mytext") // 返回 id 为"mytext"的元素 * c$("@mytext") // 返回 name 为"mytext"的所有元素 * c$(".class1") // 返回 class 为"class1"的所有元素 * c$("$div") // 返回 标签 为"div"的所有元素 * c$("$div #text1") // 返回 div 标签里面 id 为"text1"的元素(支持多级查询,以空格分隔) * c$(function(){alert('执行DOM加载完成事件');}); // 为 c$.ready(fun) 的缩写 * * c$.函数名(参数列表) // 调用这工具类里面的函数 * c$().函数名(参数列表) // 调用这工具类里面的函数 */ var c$ = window.c$ = function(arg, dom) { // 如果没有参数,则返回 本对象;让程序可以这样写: c$().函数名(参数列表) if (arguments.length === 0) return c$; if (typeof arg == 'function') return c$.ready(arg); // 有参数则调用获取元素的函数,为 c$.getElement 的缩写 return c$.getElement(arg, dom); }; /** * 这是错误调试程序 * 当页面发生错误时,提示错误讯息;仅测试环境里会提示,正式环境下不提示错误。 * 注意:chrome、opera 和 safari 浏览器不支持 onerror 事件 * @param msg 出错讯息 * @param url 出错档案的地址 * @param sLine 发生错误的行 * @return true 返回true,会消去 IE下那个恼人的“网页上有错误”的提示 */ window.onerror = function(msg, url, sLine) { // 测试时可以提示出错信息;正式发布时不提示 if (c$.isTest) { var errorMsg = "当前页面的javascript发生错误.\n\n"; errorMsg += "错误: " + msg + "\n"; errorMsg += "URL: " + url + "\n"; errorMsg += "行: " + sLine + "\n\n"; errorMsg += "点击“确定”消去此错

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值