zoukankan      html  css  js  c++  java
  • 动态加载图片与脚本

    动态加载图片许多方法。第一种方法,随便创建一个块状元素如DIV,把它加入DOM树,然后用CSS设置背景图片。第二种前半部分同第一种,只不过这次用innerHTML加一张图片变成它的子元素。第三种,利用createElement("img"),然后加入DOM与指定它的src属性。第四种,new Image对象,然后加入DOM与指定它的src属性。

      window.onload = function(){
        var image = document.createElement("div");
        document.body.appendChild(image)
        image.style.cssText = "400px;height:300px;background:url(http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s001.jpg)"
      }
    
        window.onload = function(){
        var image = document.createElement("div");
        document.body.appendChild(image)
        image.innerHTML = "<img src='http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s001.jpg'>";
      }
    
      window.onload = function(){
        var image = document.createElement("img");
        document.body.appendChild(image)
        image.src='http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s001.jpg';
      }
    
      window.onload = function(){
        var image = new Image;
        document.body.appendChild(image)
        image.src='http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s001.jpg';
      }
    

    从代码量来看,首选最后一种。后两种起码很容易就得到图片对象的引用,我们可以用complete属性来判断其是否加载成功。不同于后面将讲述的script标签,在IE中,图片对象只要一加入src属性就开始下载图片,不管它是否已加入DOM树中。

    来一个有用的应用,自动调整图片的大小。

    至于script,不像img有专门的内置对象,我们必须用createElement来创建。判断是否加载成功,与图片很不一样,我就不明白微软为什么不统一用complete属性,这次它改用readyState属性。不过 XMLHttpReques对象,微软也是用readyState属性。为了判断readyState 是否已经改变,微软还专门提供了一个onreadystatechange事件,这样我们就不用像上面那样写定时器了。readyState 有五个可能的值,分别为:

    • uninitialized:Object is not initialized with data.
    • loading:Object is loading its data..
    • loaded:Object has finished loading its data.
    • interactive:User can interact with the object even though it is not fully loaded.
    • complete:Object is completely initialized.

    很明显当readyState 为complete时,脚本就可以运作了。不过onreadystatechange 事件不局限于script标签,它还可以用于object,iframe,frame,style等标签中。但有一个问题,如果我们想刷新页面,重新执行脚本,就没有反应,这时我们就要用到loaded值。换言之,complete只个时间点,loaded是个时间段。

    readyState

    对于标准浏览器,它们就没有这么复杂,直接用onload事件来监听就成了。

  • 相关阅读:
    Leetcode 349. Intersection of Two Arrays
    hdu 1016 Prime Ring Problem
    map 树木品种
    油田合并
    函数学习
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 101. Symmetric Tree
    poj 2524 Ubiquitous Religions(宗教信仰)
    pat 1009. 说反话 (20)
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1578629.html
Copyright © 2011-2022 走看看