zoukankan      html  css  js  c++  java
  • 事件对象加载事件

    load

    load事件应该是加载事件最常用的一个,它表示当页面完全加载完成后(包括图片、JS、CSS等外部资源)触发的事件

    load事件不仅发生在document、window对象上,外部资源的加载也能触发load事件(如图片、JS、CSS、音频、视频、Ajax请求等等)

    注意: 如果页面从浏览器缓存加载,不会触发load事件

    如果是为图像指定load事件,要在指定图像的src属性之前先指定事件,因为图像是从设置src属性之后开始下载。

    如果是js资源,只有在设置了script元素的src属性并将该元素添加到文档后,才会开始下载javascript文件。CSS也是同样

    var img = new Image();
    img.onload = function() {
      document.body.appendChild(img);
    }
    img.src = 'https://cdn.86886.wang/blog/1520049901259.jpg'
    
    // 特别说明:在chrome80版本下测试,即使在onload之前设置src也是可以的
    
    var script = document.createElement('script');
    script.src="https://cdn.bootcss.com/jquery/2.2.1/jquery.js";
    document.body.appendChild(script);
    script.onload = function(){
      console.log('loaded')
    }
    
    var link = document.createElement('link');
    link.rel="stylesheet";
    link.href="https://cdn.bootcss.com/bootstrap/4.1.1/css/bootstrap-grid.min.css";
    document.getElementsByTagName('head')[0].appendChild(link);
    link.onload = function(){
      console.log('loaded')
    }
    

    error

    error事件在资源加载失败时触发,所有可以触发load事件的元素同样可以触发error事件。任何没有try-catch处理的错误都会触发window对象的error事件

    error事件可以接收三个参数:错误消息、错误所在的URL和行号

    window.onerror = function(message,url,line){
      console.log(message)
    }
    

    浏览器是否显示标准的错误消息,取决于onerror的返回值。如果返回值为false,则在控制台中显示错误消息;如果返回值为true,则不显示

    //控制台显示错误消息
    window.onerror = function(message,url,line){
      console.log(message);
      return false;
    }
    
    //控制台不显示错误消息
    window.onerror = function(message,url,line){
      console.log(message);
      return true;
    }
    

    图片也支持error事件,发生error事件时,图像下载过程已经结束,也就是不能再重新下载了。但是,可以在error事件中,重新设置图像的src属性,指向备用图像的地址

    var image = new Image();
    image.onload = function() {
      document.body.appendChild(image);
    }
    image.onerror = function(){
      image.src = 'default.png';
    }
    image.src = 'a.png';
    

    unload

    unload事件在文档被完全卸载后触发。刷新页面时,也会触发该事件

    window.onunload = function(e) {
      console.log('unload')
    }
    

    unload事件通常用于移除load事件中添加的事件处理程序,因为在卸载页面时,内存中存留的不用的事件处理程序不会被自动被移除,这就造成了内存浪费,所以最好的做法是在页面卸载之前,先通过onunload事件处理程序移除所有事件处理程序

    beforeunload

    beforeunload事件在关闭网页或刷新网页时触发,它一般地用来防止用户不小心关闭网页

    beforeunload事件需要满足以下两个条件之一才会生效:

    1. 事件处理程序返回一个真值
    2. 事件对象event.returnValue返回一个真值

    如果上面两个条件同时满足,则以第一个条件为准

    window.onbeforeunload = function(e){
      // IE浏览器显示指定文本,其他浏览器显示默认文本
      e.returnValue = '确定要离开吗?';    
    }
    

    DOMContentLoaded

    load事件需要在页面的所有资源都加载完成后才会触发,但是有时候希望DOM树加载完成后就能执行处理程序,这样用户能尽早地与页面进行交互。DOMContentLoaded事件可以在形成完整的DOM树之后立即触发,无需等待其他外部资源的加载

    DOMContentLoaded事件的监听函数应该放在所有脚本的最前面,这样即使脚本发生堵塞,也不会推迟DOMContentLoaded事件的执行

    window.addEventListener('DOMContentLoaded',function(e){
      console.log(1);
    })
    

    readystatechange

    readystatechange事件可以发生在Document对象和XMLHttpRequest对象上,它们会在readyState属性发生变化时触发,支持readystatechange事件的每个对象都有一个readyState属性,可能包含下列5个值中的一个

    uninitialized(未初始化):对象存在但尚未初始化 
    loading(正在加载):对象正在加载数据
    loaded(加载完毕):对象加载数据完成
    interactive(交互):可以操作对象了,但还没有完全加载
    complete(完成):对象已经加载完毕
    

    并非所有对象都会经历上面列出的5种状态,如果某个阶段不适合这个对象,则该对象可能跳过该阶段。另外,交互阶段和完成阶段的先后顺序是不定的,取决于页面资源的多少。如果readystatechange事件与load事件一起使用,同样无法预测两个事件的触发顺序,取决于页面资源的多少

    对于document对象而言,值为interactive的readyState会在与DOMContentLoaded大致相同的时刻触发readystatechange事件,此时,DOM树已经加载完毕

    document.onreadystatechange = function(e){
      if(document.readyState == 'uninitialized'){
        console.log('uninitialized');
      }
      if(document.readyState == 'loading'){
        console.log('loading');
      }
      if(document.readyState == 'loaded'){
        console.log('loaded');
      }
      if(document.readyState == 'interactive'){
        console.log('interactive');
      }
      if(document.readyState == 'complete'){
        console.log('complete');
      }    
    }
    
    优秀文章首发于聚享小站,欢迎关注!
  • 相关阅读:
    Cookie与Session
    发布网站
    WCF服务寄宿Windows
    JQuery:各种操作表单元素方法小结
    setTimeout()与 setInterval()
    CSS样式
    循环获取<ul>下拉列表的的值。进行对比,正确的家样式
    js定时器 实现提交成功提示
    flask 实现登录 登出 检查登录状态 的两种方法的总结
    flask 状态保持session和上下文session的区别
  • 原文地址:https://www.cnblogs.com/yesyes/p/15356343.html
Copyright © 2011-2022 走看看