Web浏览器的事件类型(交互基础)——UI事件和焦点事件

1,123 阅读2分钟

这是我参与更文挑战的第25天,活动详情查看:更文挑战

unload事件

load事件对应,这个事件在文档完全被卸载后触发。只要用户从一个页面切换到另一个页面,就会发生unload事件。利用这个事件最多的情况就是清除引用,以避免内存泄漏。与load事件类似,unload事件也有两种处理方式。

  • 第一种方式:

使用javascript

EventUtil.addHandler(window, 'unload', (e) => {
    console.log('unloaded', e);
});
  • 第二种方式

为元素添加属性的方式:

<!DOCTYPE html>
<html>
<head>
    <title>load example</title>
</head>
<body onunload="alert('unloaded!')">
</body>
</html>

resize事件

当浏览器被调整到一个宽度或者高度时,就会触发resize事件。这个事件在window上触发,因此可以通过javascript或者<body>元素中的onresize特性来指定事件处理程序。

用javascript方式:

EventUtil.addHandler(window, 'resize', (e) => {
    console.log('resized', e);
});

大部分的浏览器只要浏览器窗口变化1像素就会触发,会随着变化不断触发resize事件。所以我们尽量不要在resize中加入大量的计算代码,会使浏览器反应明显变慢。

scroll事件

虽然scroll事件是在window对象上发生的,但它实际表示的则是页面中相应元素的变化。

javascript方式:

EventUtil.addHandler(window, 'scroll', (e) => {
    if(document.compatMode === "CSS1Compat") { // 文档处于标准模式或者准标准模式。
        console.log(document.documentElement.scrollTop, e);
    } else {
        // 混杂模式
        console.log(document.body.scrollTop, e);
    }
});

resize事件类似,scroll事件也会在滚动期间频繁触发,所以尽量保持事件处理的代码简单。

焦点事件

焦点事件会在页面获得或失去焦点时触发。利用这些事件并与document.hasFocus()方法及document.activeElement属性配合,可以知道用户在页面上的行踪。总的有以下6个焦点事件。

  • blur:元素失去焦点触发。所有浏览器支持,不冒泡
  • DOMFocusIn:元素获得焦点触发(已废弃,同focusin
  • DOMFocusOut:元素失去焦点触发(已废弃,同focusout
  • focus:元素获得焦点触发。所有浏览器支持,不冒泡
  • focusin:元素获得焦点触发。IE/Chrome/Opera/Safari支持,冒泡
  • focusout:元素失去焦点触发。IE/Chrome/Opera/Safari支持,冒泡

当焦点从页面中的一个元素移到另一个元素,会依次触发下列事件:

  1. focusout在失去焦点的元素上触发
  2. focusin在获得焦点的元素上触发
  3. blur在失去焦点的元素上触发
  4. DOMFocusOut在失去焦点的元素上触发
  5. focus在获得焦点的元素上触发
  6. DOMFocusIn在获得焦点的元素上触发

引用

[1] javascript高级程序设计