当前位置: 首页 > article >正文

Web前端学习:章四 -- JavaScript初级(六-七)

157:浏览器技术的使用

浏览器大部分内容都是免费的,且可见的 ,可以看到代码及图片等
在这里插入图片描述

七:事件对象深入

158:添加事件监听

1、addEventListener - 事件绑定

=代表赋值,用onclick普通的事件写法,后面的点击事件会覆盖前面的事件
在这里插入图片描述
用addEventListener写法,可以有多个事件同时监听
在这里插入图片描述
第一个监听完了,点确定,执行第二个监听
在这里插入图片描述

2、写法:

addEventListener。能做到事件叠加,不会覆盖之前的事件

addEventListener('名称' , function(){} , true/false)

名称:即事件类型名称,比如点击事件-click , 不用加on
function:函数
turn:代表是在事件捕获情况下执行
false:代表是在事件冒泡情况下执行
(一般情况下,不写第三个参数,浏览器上有兼容问题 ; 默认为false)

在这里插入图片描述

3、不冲突

与普通的事件写法不冲突,可以看做,普通事件外多加了一个监听效果,触发时执行函数
在这里插入图片描述
点击确定后,执行监听事件,弹出2
在这里插入图片描述

159:移除事件监听

1、removeEventListener

removeEventListener:精准移除事件监听

addEventListener('名称' , 函数名称)

‘名称’:代表事件类型名称,比如点击事件-click
函数名称:指的是function函数的命名,可以精准选择要移除的事件

在这里插入图片描述

160:键盘事件

1、onkeydown - 键盘按下

onkeydown是window下的,但有部分兼容问题,挂在document下能避免一些兼容问题
在这里插入图片描述
查看对象
在这里插入图片描述
通过keycode只能输入数字
return false:取消默认事件
在这里插入图片描述

2、onkeyup - 键盘抬起

在这里插入图片描述

161:事件委托/代理/委派

1、srcElement || target - 事件委托

一般情况下,在元素生成之前给元素加事件,一般是加不上的,因为找不到元素,undefined。
在这里插入图片描述
事件委托概念:
1、给予父级元素事件
2、父级元素可以找到子级事件源
3、通过事件源className、id、nodeName等判断
4、找到需要的事件源,给予js脚本进行控制

最大的好处:
可以控制未来即将生成的元素,即动态生成的元素

事件委托逻辑
1、生成一个最大级的,或者说父级的元素,把所有事件 给最大级的元素
2、最大级元素点击的时候,委托找一下子级有没有该元素,有执行,没有不执行
如:
最大的元素:HTML:document.documentElement
在这里插入图片描述
点击时进行判断,如果id = div,即执行,不是则不执行
在这里插入图片描述

(1)target - 当前触发事件的对象的名称

event.target,这里代表的是事件源
在div外的白色区域点击,显示当前触发事件的对象是html
在这里插入图片描述
点击粉色方形,显示触发事件的对象是div
在这里插入图片描述

(2)属性:NodeName - 元素标签的名称

在这里插入图片描述
点谁谁变红
在这里插入图片描述

(3)srcElement

target 在IE浏览器中不兼容,IE认为是undefined,
srcElement在低版本火狐中不兼容,undefined,在IE、谷歌、高版本火狐浏览器中都兼容
在这里插入图片描述

162:元素offsetLeft/Top距离详解

1、offsetLeft/Top

返回当前元素记录父级元素的偏移的像素值
在这里插入图片描述
在这里插入图片描述

(1)属性transform: translate() - 平移

平移不会计算在offsetLeft/Top中,因为它只是改变显示的位置,实际上它的元素div框架还是在原来的位置
在这里插入图片描述

163:元素offsetWidth/Height详解

1、offsetWidth/Height

返回当前元素的宽度和高度,包含边框和填充,不含边距
在这里插入图片描述

164:元素拖拽及原理详解

1、原理

控制元素的position: absolute;样式,控制该样式的left、top属性让div动起来。

(1)元素跟随

元素自动跟着鼠标走
在这里插入图片描述

(2)元素拖拽

点击元素进行拖动
在这里插入图片描述

165:事件委托版拖拽制作

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			*{padding: 0; margin: 0;}
			div{
				width: 100px; height: 100px; background: red;
				position: absolute; left: 0px; top: 0px;
			}
		</style>
	</head>
	<body>
		<div class="div1"></div>
		
		<script type="text/javascript">
			document.documentElement.onmousedown = function(e){
				var ev = e || event;
				var iTarget = ev.target || ev.srcElement;
				
				if(iTarget.className == 'div1'){
					iTarget.style.background = 'pink';
					var l = ev.clientX - iTarget.offsetLeft;
					var t = ev.clientY - iTarget.offsetTop;
					
					document.onmousemove = function(e){
						var ev = e || event;
						var x = ev.clientX - l;
						var y = ev.clientY - t;
						if(x < 0) x = 0;
						if(y < 0) y = 0;
						if(x > innerWidth - iTarget.offsetWidth) x = innerWidth - iTarget.offsetWidth;
						if(y > innerHeight - iTarget.offsetHeight) y = innerHeight - iTarget.offsetHeight;
						iTarget.style.left = x + 'px';
						iTarget.style.top = y + 'px';
					};
					
					document.onmouseup = function(){
						iTarget.style.background = 'red';
						this.onmousemove = this.onmouseup = null;
					};
					
				};
				return false;
			};
		</script>
		
	</body>
</html>

http://www.kler.cn/a/5214.html

相关文章:

  • 【C++】C++11(二)
  • Linux标准IOday3
  • 运行vue项目,显示“npm”无法识别为 cmdlet、函数、脚本文件或可操作程序的名称
  • Visio 画阀门 符号 : 电动阀的画法
  • 【Leetcode 热题 100】20. 有效的括号
  • KCP解读:C#库类图
  • DBeaver连接达梦DM数据库及配置
  • 小黑仿生轮腿机器人(一)-本体说明及运动控制
  • 第08章_聚合函数
  • 【20230401】【每日一题】前K个高频元素
  • Springboot 多线程分批切割处理 大数据量List集合 ,实用示例
  • 【五】线程安全VS线程不安全
  • Postgersql神器之pgbadger安装配置
  • Vue项目中引入高德地图步骤详解
  • TensorFlow 1.x学习(系列二 :2):张量的动态形状与静态形状,基本的张量api
  • 好奇心害死猫?我怎么知道谁看到了我的 Facebook 亮点?
  • Java每日一练(20230401)
  • day17-正则表达式作业
  • 大学英语视听说教程(陈向京版本)
  • 行业分析| anyRTC智慧视频监控的应用
  • 基于springboot实现就业信息管理系统演示【附项目源码】分享
  • 东风日产到访CASAIM,双方联合开展运用高精度3D打印技术制造汽车产线相关的工装夹具、检具及治具的技术应用研究
  • 55英寸液晶拼接屏的长度和宽度尺寸是多少?
  • 编译安装redis实验文档
  • 2023美赛春季赛F题思路数据代码论文分享
  • 限流、熔断、服务降级