事件类型-UI事件、焦点事件

DOM3级事件包括以下几类事件:

  • UI事件:当用户与页面上的元素交互时触发
  • 焦点事件:当元素获得或失去焦点时触发
  • 鼠标事件:当用户通过鼠标在页面上执行操作时触发
  • 滚轮事件:当使用鼠标滚轮时触发
  • 文本事件:当在文档中输入文本时触发
  • 键盘事件:当用户通过键盘在页面上执行操作时触发
  • 合成事件:当为IME(输入法编辑器)输入字符时触发
  • 变动事件:当底层DOM结构发生变化时触发

UI事件

包括以下事件:

1.load事件

当页面完全加载后(包括所有图像、js文件、css文件等外部资源)在window上面触发;当所有框架都加载完毕时在框架集上面触发;当图像加载完毕时在<img>元素上面触发;当嵌入内容加载完毕时在<object>元素上触发。
两种定义onload事件处理程序的方式:
(1) js代码
(2) 为<body>元素添加一个onload属性

/*第一种方式*/
EventUtil.addHandler(window,"load",function(event){
  //进行相应的操作
})
/*第二种方式*/
<body onload="相应操作"></body>
1.1 图像上触发load事件
/*方式1*/
![](...)
/*方式2*/
var image = document.getElementById("myImage");
        EventUtil.addHandler(image, "load", function(event){
            event = EventUtil.getEvent(event);
            alert(EventUtil.getTarget(event).src);
        });

在创建新的<img>元素时,可以为其指定一个事件处理程序,以便图像加载完之后给出提示,但是重要的是在指定src属性之前先指定事件,如下:

/*为window指定事件,确保在document.body不会出错,页面已经完全加载*/
EventUtil.addHandler(window, "load", function(){
            var image = document.createElement("img");
       //指定src之前先指定事件
            EventUtil.addHandler(image, "load", function(event){
                event = EventUtil.getEvent(event);
                alert(EventUtil.getTarget(event).src);
            });
            document.body.appendChild(image);
            image.src = "smile.gif";            
        });

注意:新图像元素不一定要从添加到文档后才开始下载,只要设置了src属性就会开始下载。

1.2 <script>元素、<link>元素触发load事件

确定动态加载的js问价时候加载完毕,注意:与图像不同,只有设置了src属性并将新元素添加到文档后,才开始下载,所以对<script>元素来说,指定src属性和指定事件处理程序的先后顺序是不重要的。

  EventUtil.addHandler(window, "load", function(){   
       var script = document.createElement("script");
       EventUtil.addHandler(script, "load", function(event){
           alert("Loaded");
        });
        script.src = "example.js";
        document.body.appendChild(script);
  })
    EventUtil.addHandler(window, "load", function(){
            var link = document.createElement("link");
            link.type = "text/css";
            link.rel= "stylesheet";
            EventUtil.addHandler(link, "load", function(event){
                alert("css loaded");
            });
            link.href = "example.css";
            document.getElementsByTagName("head")[0].appendChild(link);
    });

2. unload事件

与load事件对应,在文档被完全卸载后触发,只要用户从一个页面切换到另一个页面,就会发生unload事件。该事件用的最多的就是清除引用,以避免内存泄漏。

/*第一种方式*/
EventUtil.addHandler(window,"unload",function(event){
  //进行相应的操作
})
/*第二种方式*/
<body onunload="相应操作"></body>

unload事件是在一切都被卸载之后才触发的,那么在页面加载后存在的那些对象此时就不一定存在了,所以此时再操作DOM节点或元素的样式就会导致错误。

3.resize事件

当浏览器窗口被调整到一个新的高度或者宽度时,就会触发resize事件,该事件在window(窗口)上面触发,因此可以通过JavaScript或者<body>元素中的onresize特性来指定事件处理程序,推荐的JavaScript方式如下:

EventUtil.addHandler(window,"resize",function(event){});
//传入的event对象有一个target属性,值为document 

关于何时触发resize事件不同浏览器有不同的机制,所以不要在这个事件的处理程序中加入大量的代码。

4.scroll事件

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

  • 混杂模式下:通过<body>元素的scrollLeft和scrollTop来监控到这一变化。
  • 标准模式下:通过<html>元素来反映这一变化(除了Safari,Safari仍然基于<body>跟踪滚动位置)
EventUtil.addHandler(window, "scroll", function(event){
            if (document.compatMode == "CSS1Compat"){    //标准模式下
                alert(document.documentElement.scrollTop);
            } else {
                alert(document.body.scrollTop);
            }
        });

与resize事件类似,scroll事件会在文档被滚动期间重复被触发,所以尽量保持事件处理程序代码简单。

焦点事件

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

  1. blur:在元素失去焦点时触发,该事件不会冒泡,所有浏览器都支持。
  2. focus:在元素获得焦点时触发,该事件不会冒泡,所有浏览器都支持。
  3. focusin:与focus事件等价,但是它冒泡。
  4. focusout:是HTML事件blur的通用版本。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 事件类型 Web浏览器可能发生的事件类型有很多。不同的事件类型具有不同的信息,而“DOM3级事件“规定了以下几类事...
    ConRon阅读 876评论 0 1
  • 13.1 事件流 “DOM2级事件”规定事件流包括3个阶段:事件捕获阶段,处于目标阶段,事件冒泡阶段。事件捕获表示...
    Elevens_regret阅读 416评论 0 0
  • DOM3 级事件规定了以下几类事件: UI(User Interface,用户界面)事件,当用户与页面上的元素交互...
    Wonder233阅读 471评论 0 0
  • 事件流 IE和Netscape开发团队提出了完全相反的两种事件流的概念,事件冒泡流和事件捕获流。 事件冒泡 事件由...
    exialym阅读 930评论 0 9
  • 我以前也是爱写日记的人,不知道从什么时候开始,自己越来越懒,懒得都不记录任何事情了,这是不好的。 我觉得,人要进步...
    forbetterfamily阅读 195评论 0 2