业界动态
setTimeout()和setInterval() 何时被调用执行
2024-11-25 06:23

在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,还浪费带宽。这也就是们通常所说的首屏加载,技术上现实其中要用的技术就是图片懒加载--到可视区域再加载。

setTimeout()和setInterval() 何时被调用执行

 

将页面里所有img属性src属性用data-xx代替,当页面滚动直至此图片出现在可视区域时,用js取到该图片的data-xx的值赋给src。

 

 

下载地址:https://github.com/helijun/helijun/blob/master/plugin/lazyLoad/jquery.lazyload.js

 

 

为了代码可读性,属性值我都写好了注释。值得注意的是预制图片属性为data-original,并且最好是给予初始高宽占位,以免影响布局,当然这里为了演示我是写死的640x480,如果是响应式页面,高宽需要动态计算。

dome演示地址:http://h5.sztoda.cn/test/testLazyLoad

 

 

在前面“前端知识的一些总结”的博文中,介绍了一款非常简单实用轻量级的图片延时加载插件echo.js,如果你的项目中没有依赖jquery,那么这将是个不错的选择,50行代码,压缩后才1k。当然你完全可以集成到自己项目中去!

下载地址:https://github.com/helijun/helijun/tree/master/plugin/echo

 

说明:blank.gif是一张背景图片,包含在插件里了。图片的宽高必须设定,当然,可以使用外部样式对多张图片统一控制大小。data-echo指向的是真正的图片地址。

 

两者都非常简单,实现思路是一样的,只是jquerylazyload多几个属性。其实常用的echo就足够了,并且完全可以集成到自己项目中的公共js中,图片懒加载是相当常见且简单实用的功能,如果你的项目中还是傻瓜式的一次性全部加载,那么请花20分钟优化下

一、什么是图片滚动加载?

通俗的讲就是:当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次),只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来。这就是图片懒加载。

二、为什要使用这个技术?

比如一个页面中有很多图片,如淘宝、京东首页等等,如果一上来就发送这么多请求,页面加载就会很漫长,如果js文件都放在了文档的底部,恰巧页面的头部又依赖这个js文件,那就不好办了。更为要命的是:一上来就发送百八十个请求,服务器可能就吃不消了(又不是只有一两个人在访问这个页面)。

因此优点就很明显了:不仅可以减轻服务器的压力,而且可以让加载好的页面更快地呈现在用户面前(用户体验好)。

三、怎么实现?

关键点如下:

1、页面中的img元素,如果没有src属性,浏览器就不会发出请求去下载图片(也就没有请求咯,也就提高性能咯),一旦通过javascript设置了图片路径,浏览器才会送请求。有点按需分配的意思,你不想看,就不给你看,你想看了就给你看~

2、如何获取正真的路径,这个简单,现在正真的路径存在元素的“data-url”(这个名字起个自己认识好记的就行)属性里,要用的时候就取出来,再设置;

3、开始比较之前,先了解一些基本的知识,比如说如何获取某个元素的尺寸大小、滚动条滚动距离及偏移位置距离;

1)屏幕可视窗口大小:对应于图中1、2位置处

原生方法:window.innerHeight 标准浏览器及IE9+ || document.documentElement.clientHeight 标准浏览器及低版本IE标准模式 ||

document.body.clientHeight 低版本混杂模式

jQuery方法: $(window).height()

2)浏览器窗口顶部与文档顶部之间的距离,也就是滚动条滚动的距离:也就是图中3、4处对应的位置;

原生方法:window.pagYoffset——IE9+及标准浏览器 || document.documentElement.scrollTop 兼容ie低版本的标准模式 ||

document.body.scrollTop 兼容混杂模式;

jQuery方法:$(document).scrollTop();

3)获取元素的尺寸:对应于图中5、6位置处;左边jquery方法,右边原生方法

$(o).width() = o.style.width;

$(o).innerWidth() = o.style.width+o.style.padding;

$(o).outerWidth() = o.offsetWidth = o.style.width+o.style.padding+o.style.border;

$(o).outerWidth(true) = o.style.width+o.style.padding+o.style.border+o.style.margin;

注意:要使用原生的style.xxx方法获取属性,这个元素必须已经有内嵌的样式,如<div style="...."></div>;

如果原先是通过外部或内部样式表定义css样式,必须使用o.currentStyle[xxx] || document.defaultView.getComputedStyle(0)[xxx]来获取样式值

4)获取元素的位置信息:对应与图中7、8位置处

1)返回元素相对于文档document顶部、左边的距离;

jQuery:$(o).offset().top元素距离文档顶的距离,$(o).offset().left元素距离文档左边缘的距离

原生:getoffsetTop(),高程上有具体说明,这边就忽略了;

顺便提一下返回元素相对于第一个以定位的父元素的偏移距离,注意与上面偏移距的区别;

jQuery:position()返回一个对象,$(o).position().left = style.left,$(o).position().top = style.top;

4、知道如何获取元素尺寸、偏移距离后,接下来一个问题就是:如何判断某个元素进入或者即将进入可视窗口区域?下面也通过一张图来说明问题。

1)外面最大的框为实际页面的大小,中间浅蓝色的框代表父元素的大小,对象1~8代表元素位于页面上的实际位置;以水平方向来做如下说明!

2)对象8左边界相对于页面左边界的偏移距离(offsetLeft)大于父元素右边界相对于页面左边界的距离,此时可判读元素位于父元素之外;

3)对象7左边界跨过了父元素右边界,此时:对象7左边界相对于页面左边界的偏移距离(offsetLeft)小于 父元素右边界相对于

页面左边界的距离,因此对象7就进入了父元素可视区;

4)在对象6的位置处,对象5的右边界与页面左边界的距离 大于 父元素左边界与页面左边界的距离;

5)在对象5位置处时,对象5的右边界与页面左边界的距离 小于 父元素左边界与页面左边界的距离;此时,可判断元素处于父元素可视区外;

6)因此水平方向必须买足两个条件,才能说明元素位于父元素的可视区内;同理垂直方向也必须满足两个条件;具体见下文的源码;

    以上就是本篇文章【setTimeout()和setInterval() 何时被调用执行】的全部内容了,欢迎阅览 ! 文章地址:http://lanlanwork.gawce.com/news/10099.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 阁恬下移动站 http://lanlanwork.gawce.com/mobile/ , 查看更多   
最新新闻
手机最适合在只剩50%的时候充电吗?这样做对电池好吗?手机什么时候充电最好「手机最适合在只剩50%的时候充电吗?这样做对电池好吗?」
首先说我的观点,或者我一直认知下的结论:“没充完就拔下,没用完就充电。”是不会影响电池的寿命和容量。需要说明一下,我是电
本周北京天气:北风“戏份”不断,升温稳占“C位”
今日北京白天晴空相伴,气温回升,但下午会伴随5、6级阵风,提醒大家户外远离高空易坠物,室外物品也请妥善安置。夜间云量增多,
综治“枢纽”发力,巧解民生纠纷结
上午8点30分天津市西青区社会治安综合治理中心刚一开门法律援助律师潘星光就在大厅里开始忙碌的工作引导讨薪的保洁阿姨落座接待
LED和OLED的哪个好?带你了解OLED和LED的区别(2)oled手机「LED和OLED的哪个好?带你了解OLED和LED的区别(2)」
OLED和LED的区别:1.分辨率:就是一Inch多少像素,LCD领先。2.开口率:就是发光面积除整块屏幕面积,之前LCD领先,如今基本是OLE
手机静音闹钟会响吗手机静音闹钟会响吗「手机静音闹钟会响吗」
山和水不是反义词。“山”的意思:1、地面形成的高耸的部分:土山。2、形状像山的:山墙(人字形房屋两侧的墙壁。亦称“房山”)
沙特去年入境旅游支出达到创纪录的410亿美元
财联社4月3日讯(编辑 李林)据沙特中央银行的数据,当地的入境旅游支出在2024年飙升至创纪录的1536.1亿里亚尔(409.5亿美元),
手机NFC为什么不能用了 手机NFC功能不能用了怎么办手机不支持nfc功能怎么办「手机NFC为什么不能用了 手机NFC功能不能用了怎么办」
  手机NFC很方便,然而,有时候您可能会遇到手机NFC无法使用的情况,这是怎么回事呢?  手机NFC为什么不能用了手机NFC功能不
大数据与会计就业目标方向(大数据在会计领域的就业方向)非常手机「大数据与会计就业目标方向(大数据在会计领域的就业方向)」
大数据时代也再次降临,对此各行各业对于,都有吧着巨大无比的影响。而是对会计专业的学生而言,大数据都是一个不可忽略的趋势。
72岁泰王派“新宠”主持仪式,90后女将军身着金衣显贵气,助手跪地服侍
当地时间4月5日下午,恰尤特拉·瓦吉拉帕塔索帕女士(คุณหญิงชยุตรา วชิรพัทธโสภา),作为泰国国王拉
病娇模拟器手机游戏病娇模拟器手机版「病娇模拟器手机游戏」
病娇模拟器手机游戏是一款以痴情女生为主角的乙女向手游,游戏中添加了汉化补丁以提供更好的游戏体验。玩家扮演一位女子高中生,