动态加载图片与脚本
动态加载图片许多方法。第一种方法,随便创建一个块状元素如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 = "width: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是个时间段。

对于标准浏览器,它们就没有这么复杂,直接用onload事件来监听就成了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库