事件之事件类型-用户界面事件(UIEvent)

UI事件一览表

属性/方法描述
DOMActivate元素被用户通过鼠标或键盘操作激活时触发(比 click 或 keydown 更通用)。 这个事件在 DOM3 Events 中已经废弃。因为浏览器实现之间存在差异,所以不要使用它
load在 window 上当页面加载完成后触发,在窗套(<frameset>)上当所有窗格(<frame>) 都加载完成后触发,在元素上当图片加载完成后触发,在元素上当相应对象加载完成后触发
unload在 window 上当页面完全卸载后触发,在窗套上当所有窗格都卸载完成后触发,在元素上当相应对象卸载完成后触发
abort在<object>元素上当相应对象加载完成前被用户提前终止下载时触发
error在 window 上当 JavaScript 报错时触发,在<img>元素上当无法加载指定图片时触发, 在<object>元素上当无法加载相应对象时触发,在窗套上当一个或多个窗格无法完成加载时 触发
select在文本框(或 textarea)上当用户选择了一个或多个字符时触发
resize在文本框(或 textarea)上当用户选择了一个或多个字符时触发
scroll当用户滚动包含滚动条的元素时在元素上触发。元素包含已加载页面的滚动条

一  load事件

1、使用场景:在 window 对象上,load 事件会在整个页面(包括 所有外部资源如图片、JavaScript 文件和 CSS 文件)加载完成后触发

2、指定方式:

  • JavaScript 方式
window.addEventListener("load", (event) => { 
 console.log("Loaded!"); 
});

  • 向元素添加 onload 属性
<!DOCTYPE html> 
<html> 
<head> 
 <title>Load Event Example</title> 
</head> 
<body onload="console.log('Loaded!')"> 
</body> 
</html> 

// 一般来说,任何在 window 上发生的事件,都可以通过给<body>元素上对应的属性赋值来指定,这是因为 HTML 中没有 window 元素。

3、场景处理

  • 图片加载:DOM中的图片和非DOM中的图片
// 可以在HTML中直接给<img>元素的 onload 属性指定事件处理程序,比如:
<img src="smile.gif" onload="console.log('Image loaded.')"> 

// 使用 JavaScript 也可以为图片指定事件处理程序:
let image = document.getElementById("myImage"); 
image.addEventListener("load", (event) => { 
 console.log(event.target.src); 
});

属性:event.target.src  

这个事件的目标是元素,因此可以直接从 event.target.src 属性中取得图片地址并打印出来

下载图片并不一定要把元素添加到文档,只要给它设 置了 src 属性就会立即开始下载

// DOM2 Events
// 在通过 JavaScript 创建新<img>元素时,也可以给这个元素指定一个在加载完成后执行的事件处理程序。在这里,关键是要在赋值 src 属性前指定事件处理程序,如下所示:
window.addEventListener("load", () => { 
 let image = document.createElement("img"); 
 image.addEventListener("load", (event) => { 
     console.log(event.target.src); 
 }); 
 document.body.appendChild(image); 
 image.src = "smile.gif"; 
});

// 也适用于 DOM0 的 Image 对象。在 DOM 出现之前,客户端都使用 Image 对象预先加载图片。可以像使用前面(通过 createElement()方法创建)的<img>元素一样使用 Image 对象,只是不能把后者添加到 DOM 树。下面的例子使用新 Image 对象实现了图片预加载:
window.addEventListener("load", () => { 
 let image = new Image(); 
 image.addEventListener("load", (event) => { 
     console.log("Image loaded!"); 
 }); 
 image.src = "smile.gif"; 
});

  • 动态加载脚本
    • <script>元素会在 JavaScript 文件加载完成后触发 load 事件,从而可以动态检测
    • 与图片不同,要下载 JavaScript 文件必须同时指定 src 属性,并把<script>元素添加到文档中
// 这里 event 对象的 target 属性在大多数浏览器中是<script>节点。IE8及更早版本不支持<script>元素触发 load 事件
window.addEventListener("load", () => { 
 let script = document.createElement("script"); 
 script.addEventListener("load", (event) => { 
 console.log("Loaded"); 
 }); 
 script.src = "example.js"; 
 document.body.appendChild(script); 
}); 

支持动态检测样式表是否加载完成

window.addEventListener("load", () => { 
 let link = document.createElement("link"); 
 link.type = "text/css"; 
 link.rel= "stylesheet"; 
 link.addEventListener("load", (event) => { 
 console.log("css loaded"); 
 }); 
 link.href = "example.css"; 
 document.getElementsByTagName("head")[0].appendChild(link); 
});

二 unload事件

1、使用场景:

  • unload 事件会在文档卸载完成后触发
  • unload 事件一般是在从一个页面导航到另一个页面时触发
  • 最常用于清理引用,以避免内存泄漏
  • 因为 unload 事件是在页面卸载完成后触发的,所以不能使用页面加载后才有的对象。此时要访问 DOM 或修改页面外观都会导致错误

2、指定方式

  • JavaScript 方式
window.addEventListener("unload", (event) => { 
 console.log("Unloaded!"); 
}); 
  • 给<body>元素添加 onunload 属性
<!DOCTYPE html> 
<html> 
<head> 
 <title>Unload Event Example</title> 
</head> 
<body onunload="console.log('Unloaded!')"> 
</body> 
</html> 

三 resize事件

1、使用事件

当浏览器窗口被缩放到新高度或宽度时,会触发 resize 事件。这个事件在 window 上触发,因此 可以通过 JavaScript 在 window 上或者为元素添加 onresize 属性来指定事件处理程序

window.addEventListener("resize", (event) => { 
 console.log("Resized"); 
}); 

2、触发条件

  • 不同浏览器在决定何时触发 resize 事件上存在重要差异。IE、Safari、Chrome 和 Opera 会在窗口缩放超过 1 像素时触发 resize 事件,然后随着用户缩放浏览器窗口不断触发。
  • 浏览器窗口在最大化和最小化时也会触发 resize 事件

!!应该避免在这个事件处理程序中执行过多计算。否则可能由于执行过于频繁而导致浏览器响应明确变慢

四 scroll事件

 1、使用场景

  • 在混杂模式下, 可以通过元素检测 scrollLeft 和 scrollTop 属性的变化
  • 在标准模式下,这些变化在除早期版的 Safari 之外的所有浏览器中都发生在元素上(早期版的 Safari 在上跟踪滚动位置)
window.addEventListener("scroll", (event) => { 
 if (document.compatMode == "CSS1Compat") { 
 console.log(document.documentElement.scrollTop); 
 } else { 
 console.log(document.body.scrollTop); 
 } 
}); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值