web前端javascript笔记——(13)事件(1)

这篇具有很好参考价值的文章主要介绍了web前端javascript笔记——(13)事件(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、事件对象

鼠标/键盘属性

altKey               返回当事件被触发时,“ALT”是否被按下。

button               返回当事件被触发时,哪个鼠标按钮被点击

clientX               返回当事件被触发时,鼠标指针的水平坐标。

clientY               返回当事件被触发时,鼠标指针的垂直坐标。

ctrlkey               返回当事件被触发时,“CTRL" 键是否被按下。

metakey             返回当事件被触发时,"meta"键是否被按下。

relatedTarget      返回与事件的目标节点相关的节点。

screenX             返回当某个事件被触发时,鼠标指针的水平坐标。

screenY              返回当某个事件被触发时,鼠标指针的垂直坐标。

shiftKey              返回当事件被触发时,"SHIFT"键是否被按下。文章来源地址https://www.toymoban.com/news/detail-823372.html

<!DOCTYPE html>

<head>
	<meta charset="UTF-8">
	<title>

	</title>
	<style>
		#areaDiv{
			width:500px;
			height:300px;
			border:1px solid black;
		}
		#showMsg{
			width:500px;
			height:200px;
			border:1px solid black;
		}
	</style>
	<script type="text/javascript">
	
		window.onload = function() {
			/*当鼠标在areaDiv中移动时,在showMsg中来显示鼠标的坐标*/
			//获取div
			var areaDiv=document.getElementById("areaDiv");
			var showMsg=document.getElementById("showMsg");
			
			/*onmousemove该事件将会在鼠标在元素中移动时被触发
			 
			 事件对象
			 当事件的响应函数被触发时,浏览器每次都会将一个事件对象作为实参传递进响应函数
			 这个实参的名字可以自己定义,就算不写实参也会传递,
			 在事件对象中封装了当前事件相关的一切信息,比如鼠标的坐标,键盘哪个案件被按下,鼠标滚轮滚动的方向
			 
			 * 
			 * */
			areaDiv.onmousemove=function(e){
				/*在IE8中,响应函数被触发时,浏览器不会传递事件对象
				 在IE8及以下的浏览器中,是将事件对象作为window对象的属性保存的
				 需要写为window.event.clientX*/
				//解决事件对象的兼容性问题
				if(!event){
					event=window.event;
				}
				//写成这种也可以 event=event||window.event;
				//在showMsg中显示鼠标的坐标
				/*clientX可以获取鼠标指针的水平坐标
				  clientY可以获取鼠标指针的垂直坐标*/
				showMsg.innerHTML="鼠标的X坐标为"+e.clientX+",鼠标的Y坐标为"+e.clientY;
				
			};
		};
	</script>

</head>

<body>
	<div id="areaDiv"></div>
	<div id="showMsg"></div>
</body>

</html>

二、div跟随鼠标移动

<!DOCTYPE html>

<head>
	<meta charset="UTF-8">
	<title>

	</title>
	<style>
		#box1{
			width:80px;
			height:80px;
			border:1px solid black;
			position: absolute;/*开启相对定位也行,一般开启绝对定位*/
			background-color: greenyellow;
		}
	</style>
	<script type="text/javascript">
	
		window.onload = function() {
			var box1=document.getElementById("box1");
			//之所以把box1改为document,给documnet绑定事件,是因为document的范围大点
			//给box1绑定的话鼠标的作用范围很小,只有在box1里面的时候才会起作用
			//获取滚动条滚动的距离
				/*chrome认为浏览器的滚动条是body的,可以通过body.scrollTop来获取
				 火狐等浏览器认为滚动条是html的*/
			var st=document.body.scrollTop||document.documentElement.srcollTop;
			//	var st=document.body.scrollTop;
				var sl=document.body.scrollLeft||document.documentElement.scrollLeft;
			   document.onmousemove=function(event){
				/*使得div可以跟随鼠标移动*/
				//解决兼容问题
				/*clientX和clientY用于获取鼠标在当前的可见窗口的坐标
				 div的偏移量,是相对于整个页面来说的*/
				event=event||window.event;
				//获取到鼠标的坐标
				var left=event.clientX;
				var top=event.clientY;
			
			/*pageX和pageY可以获取到鼠标相对于当前页面的坐标
			 在IE8中不支持使用*/
			/*var left=event.pageX;  
			var top=event.pageY;*/
				
				//只对开启定位的元素起作用,需要开启定位position:absolute;
				box1.style.left=left+sl+"px";
				box1.style.top=top+st+"px";
			};
		};
	</script>

</head>

<body>
	<div id="box1"></div>
</body>

</html>

三、事件的冒泡

<!DOCTYPE html>

<head>
	<meta charset="UTF-8">
	<title>

	</title>
	<style>
		#box1{
			width:200px;
			height:200px;
			border:1px solid black;
			
			background-color: greenyellow;
		}
		#s1{
			background-color: yellow;
			
		}
	</style>
	<script type="text/javascript">
	/*事件的冒泡(Bubble)
	 所谓的冒泡指的就是事件的向上传到,
	 当后代元素上的事件被触发时,其祖先元素的相同事件也会被触发
	 notice:
	 1.相同事件
	 2.从子到父
	 
	 在开发中大部分情况下冒泡都是有用的,如果不希望发生事件
	 冒泡可以通过事件对象来取消冒泡*/
		window.onload = function() {
			//为s1绑定一个单击响应函数
			var s1=document.getElementById("s1");
			//浏览器的兼容问题
			event=event||window.event;
			s1.onclick=function(event){
				alert("我是span的单击响应函数");
				//取消冒泡
				//可以将事件对象的cancelBubble设置为true,即可取消冒泡
				//这个属性没有兼容性问题
				event.cancelBubble=true;
			};
			//为box1绑定一个单击响应函数
			var box1=document.getElementById("box1");
			box1.onclick=function(){
				alert("我是box1的单击响应函数");
			};
			//为body绑定一个单击响应函数
			
			document.body.onclick=function(){
				alert("我是body的单击响应函数");
			};
		};
	</script>

</head>

<body>
	<div id="box1">我说box1
	<span id="s1">我是span</span></div>
</body>
</html>

四、事件的委派

<!DOCTYPE html>

<head>
	<meta charset="UTF-8">
	<title>

	</title>
	<style>
		
	</style>
	<script type="text/javascript">
	
		window.onload = function() {
		//获取按钮
		var btn01=document.getElementById("btn01");
		var ul=document.getElementById("ul");
		btn01.onclick=function(){
			//创建一个li
			var li=document.createElement("li");
			li.innerHTML="<a href='javascript:;' class='link'>新建的超链接</a>";
			ul.appendChild(li);
		};
		/*为每个超链接都绑定一个单击响应函数
		 这里我们为每一个超链接都绑定了一个单击响应函数,这种操作比较麻烦,
		 而且这些操作只能为已有的超链接设置事件,而新添加的超链接必须重新绑定*/
		 var a=document.getElementsByTagName("a");
/*		 for(var i=0;i<a.length;i++){
		 	a[i].onclick=function(){
		 		alert("我是a的单击响应函数");
		 	};
		 };
		 */
		/*我们希望,只绑定一次事件,即可应用到多个的元素上,即使元素是后添加的
		 我们了可以尝试将其绑定给元素的共同的祖先元素*/
		//为ul绑定一个单击响应函数
		//事件委派利用的是事件冒泡的原理
		/*事件的委派
		 指将事件统一绑定给元素的共同的祖先,这样当后代元素上的事件触发时,会一直
		 冒泡到祖先元素,从而通过祖先元素的响应函数来处理事件
		 事件委派是利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能*/
		ul.onclick=function(event){
			
		//	
	//		alert(this);   //this是绑定事件的对象,不是触发的事件对象
	//   处理兼容性问题
		event=event||window.event;
	    /*target
	     event中的target表示的是触发事件的对象*/
	     //如果触发事件的对象是我们期望的元素,则执行,否则不执行
	     //存在的隐患就是class可以写多个
	     if(event.target.className=="link"){
	     	alert("我是ul的单击响应函数");
	     }
		};
		};
	</script>

</head>

<body>
    <button id="btn01">添加超链接</button>
	<ul id="ul">
		<li><a href="javascript:;" class="link">超链接一</a></li>
		<li><a href="javascript:;" class="link">超链接二</a></li>
		<li><a href="javascript:;" class="link">超链接三</a></li>
	</ul>
</html>

五、事件的绑定

<!DOCTYPE html>

<head>
	<meta charset="UTF-8">
	<title>

	</title>
	<style>
		
	</style>
	<script type="text/javascript">
	
		window.onload = function() {
		      /*点击按钮以后弹出一个内容*/
		     var btn01=document.getElementById("btn01");
		     /*使用    对象.事件=函数    的形式绑定响应函数
		      它只能同时为一个元素的一个事件绑定一个响应函数,比如.onclick=function(){}
		      如果绑定多个也只有最后一个会执行,后面的会覆盖掉前面的*/
		     /*addEventListener()
		      通过这个方法也可以为元素绑定响应函数
		      参数:
		      1.事件的字符串,不要on
		      2.回调函数,当事件触发时该函数会被调用
		      3.是否在捕获阶段触发事件,需要一个布尔值,一般都传false
		      
		      *使用addEventListener()可以同时为一个元素的相同事件同时绑定多个响应函数
		      * 这样当事件被触发时,响应函数将会按照函数的绑定顺序执行
		      * 这个方法不支持IE8及以下的浏览器*/
	/*	  btn01.addEventListener("click",function(){
		  	alert(1);
		  },false);
		   btn01.addEventListener("click",function(){
		  	alert(2);
		  },false);
		  btn01.addEventListener("click",function(){
		  	alert(3);
		  	alert(this);  //btn01
		  },false);
		  
	*/
		  /*attachEvent()
		   在IE8中可以使用attachEvent()来绑定事件
		   参数:
		   1.事件的字符串,要on
		   2.回调函数
		   
		   * 
		   这个方法也可以同时为一个事件绑定多个处理函数,不同的是它是后绑定先执行,
		   执行顺序和addEventLister()相反,3,2,1*/
		  event=event||window.event;
		  //报错了,说没有这个方法
	/*	  btn01.attachEvent("onclick",function(){
		  	alert(1);
		  });
		  btn01.attachEvent("onclick",function(){
		  	alert(2);
		  });
		  btn01.attachEvent("onclick",function(){
		  	alert(3);
		  });
		  */
		  
		  /*
		   定义一个函数,用来为指定元素绑定响应函数
		   addEventListener()中的this,是绑定事件的对象
		   attachEvent()中的this,是window
		   需要统一两个方法中的this
		   * */
		  /*参数:
		   obj 要绑定事件的对象
		   eventStr  事件的字符串
		   callback  回调函数*/
		  function bind(obj,eventStr,callback){
		  	
		  }
		};
	</script>

</head>

<body>
    <button id="btn01">添加超链接</button>
	
</html>

六,通过bind()方法绑定,完成不同浏览器的兼容,统一this

<!DOCTYPE html>

<head>
	<meta charset="UTF-8">
	<title>

	</title>
	<style>
		
	</style>
	<script type="text/javascript">
	
		window.onload = function() {
          var btn01=document.getElementById("btn01");
          bind(btn01,"click",function(){
          	alert(1);
          });
           bind(btn01,"click",function(){
          	alert(2);           //按顺序弹出1,2
          });
		  /*参数:
		   obj 要绑定事件的对象
		   eventStr  事件的字符串(不要on)
		   callback  回调函数*/
		  //为了处理兼容性问题
		  function bind(obj,eventStr,callback){
		  	if(obj.addEventListener){
		  		 //大部分浏览器兼容的方式
		  		obj.addEventListener(eventStr,callback,false);//执行顺序  前  到  后
		  	}else{
		  		/*this是谁,由调用方式决定
		  		 函数调用  ,this是window
		  		 方法调用,this是调用的对象
		  		 可以用callback.call(obj)修改调用的对象*/
		  		 //IE8可以使用的方式
	/*	     obj.attachEvent("on"+eventStr,callback);   //顺序  后 到 前*/
	//为了使用call()进行的修改
	//这样做的目的是统一不同浏览器里面的this
	            obj.attachEvent("on"+eventStr,function(){
	            	callback().call(obj);
	            });
		  	}
		 
		  };
		};
	</script>

</head>

<body>
    <button id="btn01">添加超链接</button>
	
</html>

七、事件的传播

<!DOCTYPE html>

<head>
	<meta charset="UTF-8">
	<title>

	</title>
	<style>
		#box1{
			width:300px;
			height:300px;
			background-color: yellowgreen;
		}
		#box2{
			width:200px;
			height:200px;
			background-color: yellow;
		}
		#box3{
			width:150px;
			height:150px;
			background-color: skyblue;
		}
	</style>
	<script type="text/javascript">
	
		window.onload = function() {
         //事件的传播
         //为三个Box绑定单击响应函数
         var box1=document.getElementById("box1");
         var box2=document.getElementById("box2");
         var box3=document.getElementById("box3");
         
         bind(box1,"click",function(){
         	alert("我是box1的单击响应函数");
         });
          bind(box2,"click",function(){
         	alert("我是box2的单击响应函数");
         });
          bind(box3,"click",function(){
         	alert("我是box3的单击响应函数");
         });
         /*事件的传播
          ——关于事件的传播网景公司和微软公司有不同的理解
          ——微软公司认为事件应该是由内向外传播,也就是当事件触发时,应该先触发当前元素上的事件
                         然后再向当前元素的祖先元素上传播,也就是事件应该在冒泡阶段执行(也就是本例子的执行顺序)
                         box3->box1
          ——网景公司认为事件应该是由外向内传播的,也就是当前事件触发时,
                         应该先触发当前元素的最外层的祖先元素的事件,然后再向内传播给后代元素,
                         在事件的捕获阶段执行。box1——>box3
          
          W3C综合了两个公司的方案,将事件传播分为了两个阶段
          1.捕获阶段
          在捕获阶段时从最外层的祖先元素,向目标元素进行事件的捕获,但是默认此时不会触发事件
          2.目标阶段
          事件捕获到目标元素,捕获结束开始在目标元素上触发事件
          3.冒泡阶段
          事件从目标元素向它的祖先元素传递,依次触发祖先元素上的事件
          
          如果想要在捕获阶段就触发事件,可以将addEventListener()的第三个参数设置为true
         一般情况下我们不会希望在捕获阶段触发事件、所以这个参数一般都是false
         以上内容适用于IE9及以上的浏览器
         
         IE8及以下的浏览器中没有捕获阶段
          
                         * */
         //bind方法
         function bind(obj,eventStr,callback){
              if(obj.addEventListener){
                   //大部分浏览器兼容的方式
                  obj.addEventListener(eventStr,callback,false);//执行顺序  前  到  后
              }else{
                obj.attachEvent("on"+eventStr,function(){
                    callback().call(obj);
                });
              }
        }; 
		};
	</script>

</head>

<body>
    <div id="box1">
    	<div id="box2">
    		<div id="box3"></div>
    	</div>
    </div>
	
</html>

到了这里,关于web前端javascript笔记——(13)事件(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端基础自学整理|HTML + JavaScript + DOM事件

    目录 一、HTML 1、Html标签 2、Html元素 3、基本的HTML标签 二、CSS 样式 层叠样式表 三、JavaScript 使用示例 四、HTML DOM  通过可编程的对象模型,javaScript可以: window document 1、查找HTML元素 2、操作HTML元素 获取元素的属性 四、HTML DOM事件 ⚠️是DOM提供的API Html是用来描述网页的一

    2024年02月22日
    浏览(37)
  • [前端开发] 常见的 HTML CSS JavaScript 事件

    代码示例指路 常见的 HTML、CSS、JavaScript 事件代码示例 在 Web 开发中,事件是用户与网页交互的重要方式之一。通过事件,用户可以与页面元素进行交互,触发相应的功能或效果。本文将介绍常见的 HTML、CSS、JavaScript 事件,以及事件对象和事件代理的概念。 鼠标事件 鼠标事

    2024年02月19日
    浏览(37)
  • 【前端|Javascript第4篇】详解Javascript的事件模型:小白也能轻松搞懂!

    前言 在当今数字时代,前端技术正日益成为塑造用户体验的关键。而其中一个不可或缺的核心概念就是 JavaScript的事件模型 。或许你是刚踏入前端领域的小白,或者是希望深入了解事件模型的开发者,不论你的经验如何,本篇博客都将带你揭开事件模型的神秘面纱。 🚀 作者

    2024年02月13日
    浏览(31)
  • Web前端-JavaScript

    目录 1 概述 2 HTML嵌入JS代码三种方式 2.1 第一种方式 2.2 第二种方式 2.3 第三种方式 3 变量 4 数据类型 4.1 概述 4.2 Number数据类型  4.3 几个值得注意的函数 4.4 Boolean数据类型  4.5 String数据类型 4.6 关于Object类型 4.7 NaN、undefined、null的区别 4 函数 5 事件 5.1 JS中有哪些常用的事件

    2024年02月09日
    浏览(42)
  • web前端框架Javascript之JavaScript 异步编程史

    早期的 Web 应用中,与后台进行交互时,需要进行 form 表单的提交,然后在页面刷新后给用户反馈结果。在页面刷新过程中,后台会重新返回一段 HTML 代码,这段 HTML 中的大部分内容与之前页面基本相同,这势必造成了流量的浪费,而且一来一回也延长了页面的响应时间,总

    2024年02月14日
    浏览(38)
  • 前端学习记录~2023.8.3~JavaScript重难点实例精讲~第5章 DOM与事件

    本章是第五章DOM与事件相关的内容。 DOM是文档对象模型,全称为Document Object Model。DOM用一个逻辑树来表示一个文档,树的每个分支终点都是一个节点,每个节点都包含着对象。DOM提供了对文档结构化的表述,通过绑定不同的事件可以改变文档的结构、样式和内容,从而能实现

    2024年02月12日
    浏览(33)
  • web前端Javascript—7道关于前端的面试题

    本文主要是web前端Javascript—的面试题,附上相关问题以及解决答案,希望对大家web前端Javascript闭包的学习有所帮助。 每个JavaScript 程序员都必须知道闭包是什么。在 JavaScript 面试中,你很可能会被问到的问题 以下是 7 个有关 JavaScript的面试题,比较有挑战性。不要查看答案

    2024年02月03日
    浏览(79)
  • 北京大学肖臻老师《区块链技术与应用》ETH笔记 - 13.0 ETH-美链 事件

    13.0 ETH-美链 事件 2018年4月发生的事件,美链是发行在以太坊上的代币,这些代币没有自己的区块链,而是以智能合约的形式运行在以太坊的EVM平台上。发行这个代币的智能合约,对应的是以太坊状态树的一个节点,这个节点有它自己的账户余额,就相当于这个智能合约一共有

    2023年04月27日
    浏览(31)
  • 2023年web前端开发之JavaScript进阶(一)

    接上篇博客进行学习,通俗易懂,详细 博客地址: 2023年web前端开发之JavaScript基础(五)基础完结_努力的小周同学的博客-CSDN博客 学习 作用域 、变量提升、 闭包 等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法, 降低代码的冗余度 。 理解作用域对程序

    2024年02月03日
    浏览(36)
  • web安全学习笔记【13】——信息打点(3)

    信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目 [1]   #知识点: 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-CMS指纹识别源码获取方式 2、闭源-习惯配置特性

    2024年02月22日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包