- 浏览: 1465624 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
判断页面加载完毕进行相关操作是经常碰到的问题 ,不能仅仅满足于 window.onload 或 <body onload="">。
<html> <head> <title>页面加载问题-onload-by yiminghe</title> <script> function ready() { alert(document.getElementById('i_test').value); } var addE = function() { if (window.addEventListener) { return function(el, eventName, fn, capture) { el.addEventListener(eventName, fn, (capture)); }; } else if (window.attachEvent) { return function(el, eventName, fn, capture) { el.attachEvent("on" + eventName, fn); }; } else { return function() { }; } } (); /* 标准DOM2事件添加,ie,ff兼容 ,等页面image、flash、iframe等都载入完才运行 , 在如下的 html中 若不能上126 则 等很长时间才有弹出框呢。 等同于 window.onload=ready; */ /* addE(window,'load',function() { ready(); }); */ /* ff 都不行,可见 body 没有 onload 事件 ie 报错,还没有 document.body 形成 */ /* addE(document.body,'load',function() { ready(); }); */ /** 最快的方法,我们不必等待页面image、flash、iframe等都载入完(若要获取图片属性则不要用),只要htmlDOM形成就可以了, 而这个各个浏览器有不同实现,ff 遵循了标准,而ie则没有遵循标准 在下面的例子中 ,即使上不了 126 ,也会很快提示页面载入完成 **/ function DOMOk(readyOk) { /* for Mozilla */ if (document.addEventListener) { document.addEventListener("DOMContentLoaded", readyOk, false); } /* for Internet Explorer */ if (window.attachEvent) { document.write("<s" + 'cript id="ie-deferred-loader" defer="defer" src="/' + '/:"></s' + "cript>"); var defer = document.getElementById("ie-deferred-loader"); defer.onreadystatechange = function() { if (this.readyState == "complete") { readyOk(); } }; } } DOMOk(ready); </script> </head> <body> <!-- //ie ff 兼容,非常老式,在dom2标准出现之前就有了 onload="ready()" --> <input id="i_test" value="1" /> <img src='http://mimg.126.com/logo/126logo_tsp.gif' /> </body> <script> /* 只有 ie 可以 ,可能为了兼容标准以前的ie版本,且不能放在 head 中 ,document.body尚不存在 */ // document.body.onload=ready; /* ie,ff 都不行,可见 body 没有 onload 事件 */ /* addE(document.body,'load',function() { ready(); }); */ </script> </html>
这个问题这么复杂,那么 javascript 库肯定会考虑 ,看看 extjs 的实现吧,Ext.onReady 就不解释了,原理和上相同。需要注意的是 defer 属性并不能通过动态添加脚本标签设置,而只能在页面初始阶段通过 document.write 设置!
这里使用了 script 的 defer 属性,但是这种方法有个问题,当页面包含iframe时,必须得等该页面的 iframe 载入完毕后才会触发 defer 的脚本执行。所以更好的方法是 doScroll hack :
function IEContentLoaded (w, fn) { var d = w.document, done = false, // only fire once init = function () { if (!done) { done = true; fn(); } }; // polling for no errors (function () { try { // throws errors until after ondocumentready d.documentElement.doScroll('left'); } catch (e) { setTimeout(arguments.callee, 50); return; } // no errors, fire init(); })(); // trying to always fire before onload d.onreadystatechange = function() { if (d.readyState == 'complete') { d.onreadystatechange = null; init(); } }; }
不过这种解法仍然有问题,当页面处于 iframe 中时,doScroll 实际上不会抛错 :
顶层:
<script> try{ document.documentElement.doScroll("left"); alert(2); }catch(e){ alert(3); } </script> <iframe src='http://yiminghe.xx.com/t/inner.html'/>
iframe :
<script> alert(window.top==window); //alert(window.frameElement); document.documentElement.doScroll("left"); alert(1); </script> <img src='sleep.jsp'/>
所以只能在页面在顶层时使用:
// polling for no errors
if(window==window.top)(function () { try { // throws errors until after ondocumentready d.documentElement.doScroll('left'); } catch (e) { setTimeout(arguments.callee, 50); return; } // no errors, fire init(); })();
最不好也可以用 onreadystatechange ,其complete 仍然会比window load 快,但是依然在 img load 后出发 (dean's test )。
另一点是关于使用 window.top == window 还是使用 window.frameElement 来判断是否是顶层窗口,如果使用 window.frameElement 的话还得注意 try catch 否则如果iframe和主页面不同域会报错,所以一般还是用 window.top==window好一点?
update : 2010-12-26
还是使用 window.frameElement 好,否则 ie6 下会有问题,iframe中页面如果在设置 domain 前访问了 top ,则即使 iframe 的 domain 和 外层页面一致也无法访问 window.frameElement了 :jquery ticket 4787
PS:ie9 quirks 模式并不能模拟 ie6 这种bug,quirks 应该是 5.5
结果图:
发表评论
-
continuation, cps
2013-09-12 16:49 2809起 随着 nodejs 的兴起,异步编程成为一种潮流 ... -
一种基于匹配回朔的 css3 选择器引擎实现
2013-05-07 20:40 3414一种基于匹配回朔的 css3 选择器引擎实现 介绍 C ... -
cubic-bezier 模拟实现
2013-01-05 16:34 14110cubic-bezier 曲线是 css3 动画的一个重要基石 ... -
构建前端 DSL
2012-10-11 22:10 5373目前在传统的软件开 ... -
Get cursor position and coordinates from textarea
2012-04-10 20:50 5066最近需要从 textarea 中获 ... -
兼容 ie 的 transform
2012-02-23 14:00 6443css 2d transform 是 css3 引入的一个新的 ... -
promise api 与应用场景
2012-02-07 17:34 7402promise 是 commonjs 社区中提出的异步规范,其 ... -
closure compiler 代码优化实例
2012-01-08 03:23 2842closure compiler 可以进行不少有意思的优化 ... -
write html parser
2011-12-01 02:48 2925首先需要声明 html 不能用正则表达式来直接匹配进行内容抽取 ... -
获取剪贴板数据
2011-11-07 23:31 6459兼容性: 获取剪贴板数据这块各个浏览器间存在很大的 ... -
url 映射问题
2011-11-07 21:52 3226背景 url mapping 我最早知道是作为 j ... -
tip:如何原生播放声音
2011-10-19 12:45 2985如果不想考虑浏览器间 ... -
转载:瀑布流布局浅析
2011-09-29 19:02 2853简介 如果你经 ... -
cross domain request
2011-09-29 18:39 2852场景 跨域请求是随着 ... -
基于多继承的树设计
2011-09-18 03:42 2271分类 树是一种常见 ... -
caja 原理 : 前端
2011-09-01 16:48 7077作为前端开放的基础安全保证,caja 是目前比较合 ... -
tokenization of html
2011-08-29 22:38 2794html 符号解析问题 场景: 在页面上输出包 ... -
ie 下 cloneNode 导致的属性克隆
2011-08-24 16:10 2483这个还是很值得记下,一直存在的很大隐患终于解决,由于在 ie& ... -
循环引用下的深度克隆
2011-08-04 20:39 2328深度复制和浅度复制 是当初初学 c 遇到的第一批问题,似乎使 ... -
模块的静态与动态循环依赖
2011-07-25 03:43 3286场景: 循环依赖 我是不支持的,但现实中似乎又确实需 ...
相关推荐
懒加载(Lazy Load)是一种优化网页性能的技术,它主要用于图片、视频或JavaScript等资源的加载。在网页初次加载时,并不立即加载所有内容,而是只加载用户可视区域内的元素,当用户滚动页面到某一位置或者触发特定...
图片延迟加载(Lazy Load)是一种优化网页性能的技术,它通过只加载用户当前视口内的图片,而将其他未显示的图片推迟到用户滚动到相应位置时再加载,从而减少了页面初次加载的时间,提升了用户体验。在网页设计中,...
图片延迟加载(Lazy Load)是一种优化网页性能的技术,主要用于处理大量图片或多媒体资源的加载。在网页设计中,当用户滚动页面时,只有进入视口的图片才会开始加载,而那些还未显示出来的图片则会暂时保持占位符...
在前端开发中,图片懒加载(Lazy Load)是一种优化网页性能的技术,它允许网页只在用户滚动到可视区域时才加载图片,而不是一次性加载所有图片。这样可以显著减少页面初始加载时间,提升用户体验,尤其在处理大量...
即时加载技术,也称为懒加载(Lazy Load),在网页设计和开发中是一种优化策略,用于提升网站性能和用户体验。在本示例中,我们关注的是使用jQuery库实现的图片懒加载,特别是在用户滚动页面时,图片才会按需加载。...
在网页初次加载时,只加载视口内的图片,当用户滚动页面,即将进入视口的图片才会被加载。这样可以显著减少页面的初始化加载时间,提升用户体验,尤其是对于内容丰富的长页面和移动设备网络环境来说,效果尤为明显。...
在网页加载时,非首屏的图片不会立即下载,而是等待用户滚动到图片所在位置时才开始加载。这种方式可以有效减少初始加载时间,特别是对于包含大量图片的页面,可以极大提升页面的加载速度。 关于"js lazyload image...
传统的网页加载方式是当页面加载时,所有图片都会立即请求并显示。然而,如果一个页面包含大量图片,这将大大增加页面的加载时间,尤其是对于移动设备或低带宽网络环境来说。延迟加载则通过只加载视口内的图片来解决...
页面延迟加载技术是一种优化网页性能的...综上所述,"lazyload.js"和"scrollloading.js"是实现页面延迟加载的重要工具,它们有助于优化网页性能,提高用户体验,同时也需要开发者根据具体项目需求进行合理配置和优化。
jQuery图片延迟加载插件Lazy Load是一种高效的前端技术,旨在优化网页性能,特别是在包含大量图片的网页上。在当今互联网环境中,用户体验是至关重要的,而快速的页面加载速度是提升用户体验的关键因素之一。Lazy ...
在现代Web开发中,动态加载CSS(层叠样式表)是一种常见的优化策略,它能够提高网页的性能,减少页面初始化时的负担。浏览器判断则是一个关键的辅助技术,用于确保我们的代码能够在不同的浏览器环境中正常运行。这...
总之,jQuery LazyLoad 是一个强大且灵活的工具,它能有效地解决大量图片加载带来的性能问题,提升网页加载速度和用户体验。正确使用并结合合理的优化策略,将使你的网站在资源管理和用户交互方面达到更高的水平。
总结起来,"Lazyload图片延迟加载效果"是一个关键的前端性能优化技术,通过JavaScript的`Intersection Observer` API或滚动事件来实现,可以有效减少页面初始化时的加载时间,提高网页的响应速度和用户满意度。...
2. **事件监听**:可能由于JQuery.LazyLoad监听滚动事件的方式与浏览器的滚动机制不完全兼容,导致图片未能在正确的时间点加载。 3. **CSS和布局问题**:页面的CSS样式或布局设置可能会影响元素的可见性判断,使得...
总的来说,“LazyLoad 图片懒加载”是一种有效的前端性能优化策略,它结合了JavaScript的动态加载能力与浏览器的滚动事件,实现了图片资源的智能管理。通过分析和理解`lazyload.js`和`lazyload.min.js`的代码,我们...
《延迟加载(LazyLoad):优化网页性能的关键技术》 在当今互联网时代,大型网站面临着一个挑战:如何在满足用户体验的同时,尽可能减少服务器资源的消耗。延迟加载(LazyLoad),也称为按需加载,就是为解决这一...
图片延迟加载,也称为懒加载(Lazy Load),是一种优化网页性能的技术。在网页设计中,尤其是在展示大量图片的页面上,这种技术能显著提升页面加载速度,提高用户体验。懒加载的核心思想是仅加载用户当前视口内的...
综上所述,延迟加载是提升网页性能的有效手段,通过JavaScript和jQuery,我们可以轻松地实现页面和图片的延迟加载,从而提高用户访问体验。提供的压缩包文件JqueryLazyLoad.rar和LazyLoad.rar可能包含了实现这些功能...
懒加载是一种优化网页性能的技术,它允许网页在用户滚动到相关内容时才进行加载,而不是一次性加载所有内容。...通过研究和实践这个demo,开发者可以更好地理解如何在自己的项目中应用懒加载,提升网页的用户体验。