为自己的网站定制图片懒加载

前言

懒加载其实就是延迟加载,是一种对网页性能优化的方式,比如当访问一个页面的时候,优先显示可视区域的图片而不一次性加载所有图片,当需要显示的时候再发送图片请求,避免打开网页时加载过多资源。

前阵子经过我的一阵copy发现,百度上的几乎都不适合我。。。
像我这种自力更生,以自身之力走到了如今这种地步的人,
毫不犹豫选择了,自己动手,丰衣足食。再怎么copy都不如自己
动手为网站定制一个!

思路

在这之前先说一下“data-src这个img的’属性’”,很多人都用这个属性装图片链接,
我也不例外。简单思路,通过js把img标签的data-src里的图片链接取出在必要时赋值给src即可。
当然,这是简单思路常规思路,又怎么适合鄙站呢!而且百度的图片标签的src都是空的。我文章不算多但也不算少,要是一个一个改多麻烦!

定制

废话不多说,开始。

滚动条

毫无疑问,长的文章是有滚动条的,而有些文章是没有滚动条的,没有滚动条的或者说超短的文章就不需要这懒加载了,那么第一步就是判断是否有滚动条:

1
2
3
function hasScrollbar() {
return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight);
}

去原链接

即把src的图片链接放到data-src里,这是我的懒惰需要。。。
不多说,直接上代码:

1
2
3
4
5
6
7
$("img").each(function(){
if(this.className == 'site-author-image'){return;}
string=$(this).attr("src");
if (string != "undefined" && string != undefined ){
$(this).attr("src","");
$(this).attr("data-src",string);
}});

可以看到有个判断,这就是量站定制的好处,不想懒加载的图片直接加个判断,清晰明了。

执行时间

毫无疑问,什么时候执行是必须需要想的问题。如果把js放到head标签内或者说
在img标签还没加载出来就执行显然是无效的
那么最好自然就是在所有标签加载出来的时候开始执行。从上面的代码可以看出我是用了jQuery的,这里自然也不例外。
如果不想用jQuery也行,具体方法我懒得想,自行百度。
至于用jQuery,自然是:

1
2
3
4
5
6
7
$(document).ready(function(){
// 执行代码
});
或者
$(function(){
// 执行代码
});

lazyimages

百度可知,

document.documentElement.clientHeight

代表了显示的部分文档高度,

document.documentElement.scrollTop

代表了屏高到文档顶部的距离,也是滚动条滚动的距离,

element.offsetTop

代表了元素到文档顶部的距离,如果没错的话!
那么可以想象一下将第一个红色记为one,第二个记为two,第三个记为three,那么当元素与屏幕底部相遇的那一刻不就是one+two=three。
如此一来,当one+two>three时就是图片正在被读或被读过后,那么此时就可以给src赋值,让图片显示出来。
然后封装成一个函数,例如:
1
2
3
4
5
6
7
8
9
10
11
12
var imgs = document.getElementsByTagName('img');//放在函数外,不用多次调用
function lazyimages(){
var one = document.documentElement.clientHeight;
var three = document.documentElement.scrollTop;
for (var i = 0; i < imgs.length; i++){
var two = imgs[i].offsetTop;
if(one+three>two){
if(imgs[i].className == 'site-author-image'){return;}
imgs[i].src = imgs[i].getAttribute('data-src')
}
}
}

函数节流

然后百度上找一个函数节流,略作修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var previous = null;
function throttle(mustRun = 1000) {
const timer = null;

const now = ( new Date()).valueOf();
if (!previous){
previous = now;
}
const remaining = now - previous;
if (mustRun && remaining >= mustRun) {
lazyimages();
previous = now;
}
}

监听

监听滚动条滚动的事件

1
document.addEventListener('scroll',function(){throttle();});

END

自此大功告成!但是实验表明这看似懒加载,实际上已经不是懒加载了。因为加载标签的那一刻,请求就已经发送出去了。所以没有省流量的效果!
那么来思考一下,浏览器加载网页→加载到img标签→加载图像以及标签加载完毕,开始执行js,而图像还没加载完,所以理论上,可以加快window.onload的触发速度,加快网页的加载速度……差不多就酱。


满分是10分的话,这篇文章你给几分,您的支持将鼓励我继续创作!
0 comments
Anonymous
Markdown is supported

Be the first person to leave a comment!

人生若只如初见,何事秋风悲画扇。
  1. 1 小年兽 程嘉敏
  2. 2 Lonely Christmas 陈奕迅
  3. 3 追光者 岑宁儿
  4. 4 空山新雨后 锦零
  5. 5 目及皆是你 小蓝背心
  6. 6 如果 Bo Peep
  7. 7 New Boy 房东的猫
  8. 8 所念皆星河 房东的猫
  9. 9 飞云之下 (Live) 韩甜甜
  10. 10 倔强 五月天
  11. 11 白山茶 熠垩
  12. 12 错位时空 艾辰
  13. 13 生来倔强 南征北战NZBZ
  14. 14 烟火 陈翔
  15. 15 我的怀集中学 唐弟
  16. 16 玫瑰花的葬礼 许嵩
  17. 17 明天,你好 牛奶咖啡
  18. 18 越长大越孤单 牛奶咖啡
  19. 19 爱的翅膀 林依婷
  20. 20 辣条王子 李一帆
  21. 21 北京东路的日子 南京外国语学校学生
  22. 22 好想爱这个世界啊 (Live) 华晨宇
  23. 23 生生世世爱 吴雨霏
  24. 24 游京 海伦
  25. 25 青梅竹马 陈秋含
  26. 26 骄傲的少年 南征北战NZBZ
  27. 27 让我留在你身边 Vk
  28. 28 飞鸟和蝉 任然
  29. 29 收敛 不够
  30. 30 勾指起誓 (原唱: 洛天依) 泠鸢yousa
  31. 31 夏天的风 蓝心羽
  32. 32 我的秘密 G.E.M. 邓紫棋
  33. 33 你不纯洁 夏婉安
  34. 34 卑微到最后有多痛 夏婉安
  35. 35 给陌生的你听 G.G(张思源)
  36. 36 卡布奇诺 6诗人
  37. 37 楼下等你 Young 7
  38. 38 少年 (Live) 梦然
  39. 39 你是我的女朋友 小右(陈柯右)
  40. 40 溯 (Reverse) feat. 马吟吟 CORSAK胡梦周
  41. 41 世界这么大还是遇见你 程响
  42. 42 桥边姑娘 海伦
  43. 43 像鱼 王贰浪
  44. 44 慢慢喜欢你 莫文蔚
  45. 45 多想在平庸的生活拥抱你 隔壁老樊
  46. 46 我曾 隔壁老樊
  47. 47 四块五 隔壁老樊
  48. 48 关于孤独我想说的话 隔壁老樊
  49. 49 无论你多怪异我还是会喜欢你 江惠莲
  50. 50 亲爱的姑娘你为何要离开 张赫宣
  51. 51 可能否(翻自 木小雅) 李佳雨
  52. 52 山楂树の恋(Cover:雷智皓) 小思怡ya
  53. 53 漂洋过海来看你 王丽坤
  54. 54 依然爱你 王力宏
  55. 55 光明 谭艳
  56. 56 你的答案 阿冗
  57. 57 春天里 旭日阳刚
  58. 58 2799 佳利
  59. 59 假装 刘德华
  60. 60 一个深爱的女孩 本兮
  61. 61 空空如也 胡66
  62. 62 去年夏天 王大毛
  63. 63 可不可以 张紫豪
  64. 64 听说 丛铭君
  65. 65 GOOD NIGHT Lil Ghost小鬼
  66. 66 世间美好与你环环相扣 柏松
  67. 67 暗恋 Akie秋绘
  68. 68 写给我第一个喜欢的女孩的歌 封茗囧菌
  69. 69 遇见你的时候所有星星都落到我头上 封茗囧菌
  70. 70 浪子回头 茄子蛋
  71. 71 谁伴我闯荡 BEYOND
  72. 72 爱丫爱丫 By2
  73. 73 云烟成雨 房东的猫
  74. 74 这一生关于你的风景(女生版) 你的二智bb
  75. 75 离岸 苏晗
  76. 76 一个人 夏婉安
  77. 77 有没有人告诉你 陈楚生
  78. 78 奇妙能力歌 陈粒
  79. 79 吻得太逼真 封茗囧菌
  80. 80 靠近一点点 梁心颐
  81. 81 红豆 王菲
  82. 82 偏爱 张芸京
  83. 83 此生不换 青鸟飞鱼
  84. 84 文爱 CG/贺敬轩
  85. 85 体面 (Live) 于文文
  86. 86 不再联系 夏天Alex
  87. 87 入戏太深 马旭东
  88. 88 别想她 高进
  89. 89 越长大越孤单 牛奶咖啡
  90. 90 需要人陪 王力宏
  91. 91 平凡之路 (Live) 朴树
  92. 92 你笑起来真好看 李昕融
  93. 93 大克星 葛雨晴
  94. 94 7538(Me U-Remix) KT
  95. 95 兵心 阿振
  96. 96 微微 傅如乔
  97. 97 小虎队
  98. 98 爱的魔法 封茗囧菌
  99. 99 烟火里的尘埃 华晨宇
  100. 100 我管你 (真我版) 华晨宇
  101. a 杂七杂八——夜深人静听 >>
  102. b 粤语——歌单 >>
  103. c 英语——歌单 >>
  104. d 日语——歌单 >>
  105. e 李哈哈——歌单 >>
  106. f 动画——歌单 >>
  107. g 冰冰超人——歌单 >>
  108. h 纯音乐——歌单 >>
  109. i 情歌五首——歌单 >>
  110. j 汪苏泷——歌单 >>
  111. k 徐良——歌单 >>
  112. l 薛之谦——歌单 >>
  113. m 泠鸢——歌单 >>
  114. n 锦零——歌单 >>
小年兽 - 程嘉敏
00:00 / 00:00

作词 : 吉他兔

作曲 : 吉他兔

策划:左木修

编曲:Fsy小诺

演唱:程嘉敏

混音:幺唠

「 童话守则Vo1.亲情篇 」

小年兽住在蔚蓝色的深海里

头上四个犄角一身金鳞

它和爸爸妈妈幸福生活在一起

日子过得快乐无忧无虑

每年的除夕夜晚到来那一天

爸爸妈妈总要短暂分离

这次他们说小年兽你已经长大了

也是时候去完成我们的使命

人间的小镇里

红灯笼照满地

充满欢声笑语热闹不停

可是年兽的出现

好像打破了喜庆

它们被鞭炮噼里啪啦赶出村落去

(Music)

又到了年初年尾相连这一天

小年兽跟着爸妈来到人间

哪怕还是会惊慌失措灰头又土脸

但一想到大家能团圆苦也甜

人间的小镇里

红灯笼照满地

充满欢声笑语热闹不停

可是年兽的出现

好像打破了喜庆

它们被鞭炮噼里啪啦赶出村落去

小年兽很委屈

哭得很伤心

不懂为什么不受人们欢迎

妈妈说我们使命

是为了温柔提醒

每个人都应该相互团结用爱相聚

年兽存在的意义

是为了告诉你

离乡太久记得要回家团聚

——End——