`
sbpya
  • 浏览: 618752 次
  • 性别: Icon_minigender_1
  • 来自: 杭州,长沙
社区版块
存档分类
最新评论

HTML页面元素加载顺序研究报告(3)----Script标签与背景图片(转)

阅读更多

3、看下Javascript对图片加载顺序的影响

采用和之前类似的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
title>测试图片加载顺序</title>
<
link rel="stylesheet" href="css/style.css" />
</
head>
<
body>
<
div id="div1"><img src="images/Div1.jpg" /></div>
<
div id="div2"><img src="images/Div2.jpg" /></div>
<
div id="div3"><img src="images/Div3.jpg" /></div>
<
div id="cssContainer1">
<
div id="cssContainer2" style="background-image:url('images/Css2.JPG')"></div>
<
script>
var
a;
for(var i=0;i<1000;i++)
{
a += i;
}
</script>
<
div id="cssContainer3"></div>
<
div id="cssContainer4" style="background-image:url('images/Css4.JPG')"></div>
</
div>
<
div id="div4"><img src="images/Div4.jpg" /></div>
<
div id="div5"><img src="images/Div5.jpg" /></div>
<
div id="div6"><img src="images/Div6.jpg" /></div>
<
div id="div7"><img src="images/Div7.jpg" /></div>
<
div id="div8"><img src="images/Div8.jpg" /></div>
<
div id="div9"><img src="images/Div9.jpg" /></div>
<
div id="div10"><img src="images/Div10.jpg" /></div>
<
div id="div11"><img src="images/Div11.jpg" /></div>
<
div id="div12"><img src="images/Div12.jpg" /></div>
<
style>
#cssContainer1{}{
background-image:url("images/Css1.JPG");
}
</style>
</
body>
</
html>

其中style.css中的代码如下:

#cssContainer3{
background-image:url("../images/Css3.JPG");
}

在应用了css样式设置背景图片的div中,加入了一段简单的循环运行1000次的Javascript脚本。

IE7+HttpWatch:

image

FF3.0+FireBug:

image

这里大概能够看出一些问题:

  1. IE中的Css2在前面加载了。
  2. Firefox中的Css2、Css3、Css4都在前面加载了。

再看下一段代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
title>测试图片加载顺序</title>
<
link rel="stylesheet" href="css/style.css" />
</
head>
<
body>
<
div id="div1"><img src="images/Div1.jpg" /></div>
<
div id="div2"><img src="images/Div2.jpg" /></div>
<
div id="div3"><img src="images/Div3.jpg" /></div>
<
style>
#cssContainer1{
background-image:url("images/Css1.JPG");
}
</style>
<
div id="cssContainer1">
<
div id="cssContainer2" style="background-image:url('images/Css2.JPG')"></div>
<
script>
</
script>
<
div id="cssContainer3"></div>
<
div id="cssContainer4" style="background-image:url('images/Css4.JPG')"></div>
</
div>
<
div id="div4"><img src="images/Div4.jpg" /></div>
<
div id="div5"><img src="images/Div5.jpg" /></div>
<
div id="div6"><img src="images/Div6.jpg" /></div>
<
div id="div7"><img src="images/Div7.jpg" /></div>
<
div id="div8"><img src="images/Div8.jpg" /></div>
<
div id="div9"><img src="images/Div9.jpg" /></div>
<
div id="div10"><img src="images/Div10.jpg" /></div>
<
div id="div11"><img src="images/Div11.jpg" /></div>
<
div id="div12"><img src="images/Div12.jpg" /></div>
</
body>
</
html>

相比第一段代码,这里把Javascript脚本简化为一对空的Script标签,而且把之前放在最后的设置cssContainer1的背景图片的内联style放到了script的前面。

IE7+HttpWatch:

image 

FF3.0+FireBug:

image

那么现在我们可以看出几点:

  1. 无论对IE还是FF,Javascript确实对图片的加载顺序有影响,原本应该在最后加载的背景图片会在Javascript执行时加载。
  2. 加载不会解析Javascript之后定义的CSS,从第一段代码中可以看到,CSS1.jpg并没有被提前加载,因为它的内联定义放在了后面。
  3. IE只对Javascript标签之前的背景图片提前加载,Javascript之后的图片,还是按照先加载内嵌图片,后加载背景图片的顺序,无论Div的结构如何。而FF的情况会复杂一些。

看下下面的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
title>测试图片加载顺序</title>
<
link rel="stylesheet" href="css/style.css" />
</
head>
<
body>
<
div id="div1"><img src="images/Div1.jpg" /></div>
<
div id="div2"><img src="images/Div2.jpg" /></div>
<
div id="div3"><img src="images/Div3.jpg" /></div>
<
style>
#cssContainer1{
background-image:url("images/Css1.JPG");
}
</style>
<
div id="cssContainer1">
<
div id="cssContainer2" style="background-image:url('images/Css2.JPG')"></div>
<
script>
</
script>
<
div id="cssContainer3"></div>
</
div>
<
div id="cssContainer4" style="background-image:url('images/Css4.JPG')"></div>
<
div id="div4"><img src="images/Div4.jpg" /></div>
<
div id="div5"><img src="images/Div5.jpg" /></div>
<
div id="div6"><img src="images/Div6.jpg" /></div>
<
div id="div7"><img src="images/Div7.jpg" /></div>
<
div id="div8"><img src="images/Div8.jpg" /></div>
<
div id="div9"><img src="images/Div9.jpg" /></div>
<
div id="div10"><img src="images/Div10.jpg" /></div>
<
div id="div11"><img src="images/Div11.jpg" /></div>
<
div id="div12"><img src="images/Div12.jpg" /></div>
</
body>
</
html>
这里相比上一段代码,将原本包含在cssCotainer1这个div里的cssContainer4放到了外面。IE下的表现没有变化,看下FF的反应:

image

图片CSS4.jpg被放到了最后加载!而CSS3.jpg虽然也是在Script之后才定义的,而且是放在外部Css文件中的CSS3.jpg,由于在执行Javascript的时候Css文件已被加载完毕,却依然被提前加载了。现在我们可以猜想,在Firefox中,图片的加载顺序受Javascript的影响下,同时与Div的结构有关

本节的最后一段代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
title>测试图片加载顺序</title>
<
link rel="stylesheet" href="css/style.css" />
</
head>
<
body>
<
div id="div1"><img src="images/Div1.jpg" /></div>
<
div id="div2"><img src="images/Div2.jpg" /></div>
<
div id="div3"><img src="images/Div3.jpg" /></div>
<
div>
<
div id="cssContainer1">
<
div id="cssContainer2" style="background-image:url('images/Css2.JPG')"></div>
<
script>for(var i=0;i<1000;i++){var a++}</script>
<
div id="cssContainer3"></div>
</
div>
<
div id="cssContainer4" style="background-image:url('images/Css4.JPG')"></div>
<
div id="div4"><img src="images/Div4.jpg" /></div>
</
div>
<
div id="div5"><img src="images/Div5.jpg" /></div>

<
div id="div6"><img src="images/Div6.jpg" /></div>
<
div id="div7"><img src="images/Div7.jpg" /></div>
<
div id="div8"><img src="images/Div8.jpg" /></div>
<
div id="div9"><img src="images/Div9.jpg" /></div>
<
div id="div10"><img src="images/Div10.jpg" /></div>
<
div id="div11"><img src="images/Div11.jpg" /></div>
<
div id="div12"><img src="images/Div12.jpg" /></div>
<
style>
#cssContainer1{
background-image:url("images/Css1.JPG");
}
</style>
</
body>
</
html>

其中style.css文件做了一些调整,变成:

#cssContainer1{
background-image:url("../images/Css5.JPG");
}
#cssContainer3{
background-image:url("../images/Css3.JPG");
}

这部分代码和之前的差异:一是用一个新的Div套住了cssContainer1、cssContainer4和一个普通的Div4;另外在外联的css文件中,重复定义了cssContainer1的背景图片,另一个定义在Html文档的最末端

FF3.0+FireBug:

image

到这里基本可以总结出来Firefox在Script的影响下对图片的加载顺序:

与IE不同,FF遵守的是另一套DIV逐级解析的模式。受Script标签影响的不仅仅是Script标签之前的图片,还包括了包含Script标签的父级标签内的所有图片。在同级标签中,图片的加载顺序符合先内嵌、后背景的原则,而不同级的标签,则按由先到后的顺序加载。

此外,看下IE:

image

注意被选中的那一行,其中那个Result字段为Abort的CSS5.jpg图片。原本由于外联CSS优先级最低,CSS5.jpg应当被后定义的内联CSS1.jpg覆盖,不被加载,但由于Javascript的影响,这里却被加载了,虽然由于IE很快读到了HTML的末端,发现了后定义的CSS1.jpg,取消了CSS5.jpg

分享到:
评论

相关推荐

    HTML页面不认标签,怎么办?

    HTML页面不认&lt;script type="text/template"&gt;标签,怎么办? 比如 &lt;script type="text/template"&gt; ... &lt;/script&gt; 以上代码,HTML浏览器不能解析,报错. 怎么办? 我来教给你如何变相的让他认这个type.

    how-to-load-dynamic-script, 加载动态脚本的正确方法.zip

    3. 动态创建`&lt;script&gt;`元素: 要实现动态加载,可以使用JavaScript动态创建`&lt;script&gt;`元素并将其插入到DOM中。以下是一个例子: ```javascript const script = document.createElement('script'); script.src = ...

    加载中gif图片-透明loading.rar

    本资源"加载中gif图片-透明loading.rar"提供的是200多张专门用于这种目的的gif动态图片,它们具有透明背景,这意味着这些图片可以方便地叠加在任何颜色或图案之上,不会与页面其他元素产生冲突。 1. **GIF 图片格式...

    html和js通过window.print()实现调用浏览器打印带背景图片和生成二维码的文件功能

    在网页开发中,有时我们需要为用户提供打印功能,例如打印带有背景图片和二维码的文档。`window.print()` 是JavaScript中的一个内置方法,它可以帮助我们轻松实现这个需求。本篇将详细介绍如何利用HTML和JavaScript...

    jquery.lazyload.js 图片懒加载 --demo

    尤其对于内容丰富的网站,一次性加载所有图片可能会导致页面加载速度变慢,影响用户体验。为了解决这个问题,`jQuery LazyLoad.js` 应运而生。它是一种高效的图片延迟加载插件,允许我们在用户滚动到图片所在位置时...

    loading(各种AJAX加载图片)

    在网页开发中,AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它允许页面在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。"loading(各种AJAX加载图片)"这个主题,主要关注...

    164个loading图片gif格式-透明背景

    在实际应用中,这些加载动画可以被用作网页元素加载、页面跳转、数据获取等场景。例如,在网页内容分页加载时,可以在下一页加载前展示一个loading动画,提升用户体验。同时,这些动效也可以作为API调用或者后台处理...

    163邮箱html页面

    8. **图标和图片**:页面可能使用SVG图标或背景图片来增强视觉效果。SVG图标具有矢量特性,可以无损缩放,而背景图片则可以通过CSS控制大小和位置。 9. **响应式图片**:HTML5引入了srcset和sizes属性,允许图片...

    页面加载时 提示 正在加载中

    此外,为了提高用户体验,`loading.jsp`的加载提示通常会设计成吸引人的动画效果,比如旋转的加载图标、渐变的背景色等,以更直观地传达加载进度。CSS3提供了丰富的动画和过渡效果,可以轻松实现这些设计。 总的来...

    页面加载效果

    此外,JavaScript还可以实现更复杂的加载效果,比如使用定时器模拟进度条加载,或者动态改变背景颜色、图片等。这些效果可以通过修改元素的样式、属性,甚至创建新的元素来实现。 总结一下,JavaScript在页面加载...

    html5全屏响应式背景图片导航菜单特效

    - 图片懒加载:提高页面加载速度,仅在图片进入视口时才加载。 5. JavaScript和jQuery: - 事件监听:使用JavaScript或jQuery监听用户的点击、滚动等行为,触发相应的菜单效果。 - 动画效果:利用JavaScript或...

    embed-script:将脚本元素嵌入到可滚动HTML页面中

    将脚本元素嵌入到可滚动HTML页面中。 基本标记: EMBED-SCRIPT元素是设置了data-embed-script属性的任何元素。 此属性的值是要加载的EMBED-SCRIPT包的名称。 可选属性data-embed-param可用于指定脚本操作的其他参数...

    intra-mart-script中文版教程

    《intra-mart-script中文版教程》是一份详尽的文档,主要针对intra-mart Web平台和应用框架Ver.7.1的脚本开发模式进行了深入解析,旨在指导开发者如何利用该平台进行高效的应用程序开发。这份文档分为多个章节,涵盖...

    js在html中的加载执行顺序.docx

    ### JavaScript在HTML中的加载与执行顺序详解 #### 一、加载与执行的基本原则 JavaScript作为网页开发中的重要组成部分,在HTML文档中的加载与执行顺序对于理解页面动态行为至关重要。以下是一些基本的原则: 1. ...

    JQuery LazyLoad 图片懒加载实例

    当页面包含大量图片时,一次性加载所有图片可能会导致页面加载速度变慢,用户体验下降。为了解决这一问题,我们可以使用`jQuery LazyLoad`插件实现图片的延迟加载,即“懒加载”。本文将详细介绍如何利用jQuery Lazy...

    『HTML5游戏开发』加载图片和显示进度条

    在HTML中,我们可以使用`&lt;img&gt;`标签来直接加载图片,但这种方式无法控制加载进度,也不适合动态加载。在HTML5中,我们通常使用`Image`对象的API进行异步加载。创建一个新的`Image`对象,然后设置其`src`属性为图片...

    html中嵌入js执行顺序_html中嵌入js执行顺序_

    1. **同步与异步加载**:默认情况下,`&lt;script&gt;`标签内的脚本和通过`src`引入的脚本都是同步加载的,这意味着浏览器会阻塞页面渲染直至脚本执行完毕。然而,为了提高页面加载速度,可以使用`async`或`defer`属性。 ...

    nativescript-loading-indicator, 带有NativeScript选项的进度/加载指示器 iOS Android.zip

    nativescript-loading-indicator, 带有NativeScript选项的进度/加载指示器 iOS Android nativescript-loading-indicatornativescript-loading-indicator 是NativeScript的一个插件,它覆盖了当前页面上的加载指示器...

    在frameset框架集中应用背景图片

    在探讨如何在frameset框架集中应用背景图片时,我们首先需要理解frameset的基本概念以及CSS在其中的应用方式。本文将详细介绍如何通过frameset布局来实现背景图片的有效展示,并且会结合具体的HTML代码示例进行说明...

    [html5技术]基于bootstrap制作的多标签页(tabs)

    3. **添加Tab项**:在Nav组件中,每个标签页是一个`&lt;li&gt;`元素,包裹在一个`&lt;a&gt;`元素内,使用`href`属性定义链接到的`&lt;div&gt;`,同时设置`data-toggle="tab"`和`role="tab"`属性。每个`&lt;a&gt;`元素还需要一个唯一的`id`和...

Global site tag (gtag.js) - Google Analytics