`

原生Js页面滚动延迟加载图片 - dtdxrk

阅读更多
原帖地址:http://www.cnblogs.com/dtdxrk/p/3151001.html

原理和过程
1.页面滚动加载事件
2.获取元素在页面里的top值 根据滚动条的位置 判断何时显示图片
3.获取元素集合 加载过的图片从集合里删除

效果预览:http://jsfiddle.net/dtdxrk/SkYNq/embedded/result/

1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>原生Js页面滚动延迟加载图片</title>
6 <style type="text/css">
7 *{margin: 0;padding: 0}
8 img.scrollLoading{border: 1px solid #ccc;display: block;margin-top: 10px;}
9 </style>
10 </head>
11 <body>
12
13 <div id="content"></div>
14
15 </body>
16 </html>
17
18 <script type="text/javascript">
19 var _CalF = {
20 $ : function(object){//选择器
21 if(object === undefined ) return;
22 var getArr = function(name,tagName,attr){
23 var tagName = tagName || '*',
24 eles = document.getElementsByTagName(tagName),
25 clas = (typeof document.body.style.maxHeight === "undefined") ? "className" : "class";//ie6
26 attr = attr || clas,
27 Arr = [];
28 for(var i=0;i<eles.length;i++){
29 if(eles[i].getAttribute(attr)==name){
30 Arr.push(eles[i]);
31 }
32 }
33 return Arr;
34 };
35
36 if(object.indexOf('#') === 0){ //#id
37 return document.getElementById(object.substring(1));
38 }else if(object.indexOf('.') === 0){ //.class
39 return getArr(object.substring(1));
40 }else if(object.match(/=/g)){ //attr=name
41 return getArr(object.substring(object.search(/=/g)+1),null,object.substring(0,object.search(/=/g)));
42 }else if(object.match(/./g)){ //tagName.className
43 return getArr(object.split('.')[1],object.split('.')[0]);
44 }
45 },
46 getPosition : function(obj) { //获取元素在页面里的位置和宽高
47 var top = 0,
48 left = 0,
49 width = obj.offsetWidth,
50 height = obj.offsetHeight;
51
52 while(obj.offsetParent){
53 top += obj.offsetTop;
54 left += obj.offsetLeft;
55 obj = obj.offsetParent;
56 }
57
58 return {"top":top,"left":left,"width":width,"height":height};
59 }
60 };
61
62
63 //添加图片list
64 var _temp = [];
65 for (var i = 1; i < 21; i ++) {
66 _temp.push('<img class="scrollLoading" data-src="http://images.cnblogs.com/cnblogs_com/Darren_code/311197/o_' + i + '.jpg" src="loading.gif" /><br />图片' + i);
67 }
68 _CalF.$("#content").innerHTML = _temp.join("");
69
70
71 function scrollLoad(){
72 this.init.apply(this, arguments);
73 }
74
75 scrollLoad.prototype ={
76 init : function(className){
77 var className = "img."+className,
78 imgs = _CalF.$(className),
79 that = this;
80 this.imgs = imgs;
81 that.loadImg();
82 window.onscroll = function(){
83 that.time = setTimeout(function(){
84 that.loadImg();
85 },400);
86 }
87 },
88 loadImg : function(){
89 var imgs = this.imgs.reverse(), //获取数组翻转
90 len = imgs.length;
91
92 if(imgs.length===0){
93 clearTimeout(this.time);
94 return;
95 }
96 for(var j=len-1;j>=0;j--){ //递减
97 var img = imgs[j],
98 imgTop = _CalF.getPosition(imgs[j]).top,
99 imgSrc = img.getAttribute("data-src"),
100 offsetPage = window.pageYOffset ? window.pageYOffset : window.document.documentElement.scrollTop,//滚动条的top值
101 bodyHeight = document.documentElement.clientHeight; //body的高度
102 if((offsetPage+bodyHeight/2) > (imgTop-bodyHeight/2)){
103 img.src = imgSrc;
104 this.imgs.splice(j,1);
105 }
106 }
107 }
108 }
109
110
111 var img1 = new scrollLoad("scrollLoading");
112
113 </script>

 


本文链接:http://www.cnblogs.com/dtdxrk/p/3151001.html,转载请注明。

分享到:
评论

相关推荐

    17行原生JS简洁图片预加载方案-

    个人认为其实最初学习JavaScript最好找到简洁易懂的demo学习,但是往往搜索到一堆的插件,没有一定的js功底看的累,浪费时间,也很难学到什么干货。-

    原生js页面滚动延迟加载图片

    本文实例为大家讲解了javascript瀑布流代码,即...原生Js页面滚动延迟加载图片&lt;/title&gt; &lt;style type=text/css&gt; * { margin:0; padding:0 } img.scrollLoading { border:1px solid #ccc; display:block;

    原生Js页面滚动延迟加载图片实现原理及过程

    原理和过程 1.页面滚动加载事件 2.获取元素在页面里的top值 根据滚动条的位置 判断何时显示图片 3.获取元素集合 加载过的...原生Js页面滚动延迟加载图片&lt;/title&gt; &lt;style type=”text/css”&gt; *{margin: 0

    原生javascript页面图片懒加载代码

    原生javascript页面图片懒加载效果

    页面滚动分页---iScroll实例:下拉刷新,滚动翻页

    本文将深入探讨iScroll库以及如何利用它来实现在页面滚动时的动态加载数据。 iScroll是一款轻量级的JavaScript库,由Matteo Spinelli开发,专门用于实现平滑的滚动效果和触摸事件处理。它支持各种设备,包括桌面...

    js页面图片延迟加载特效.zip

    在网页设计中,提高用户体验和...总结来说,"js页面图片延迟加载特效"是一种高效优化网页加载速度的技术,通过JavaScript实现,能显著提升用户体验。通过理解和应用这些知识点,开发者可以创建更流畅、响应更快的网页。

    Vue下滚动到页面底部无限加载数据的示例代码

    图片懒加载是一种优化技术,用于延迟加载图片,直到用户滚动到图片所在的位置。在本示例代码中,我们使用懒加载来加载用户的头像。 5. 结合原生 js 来写 scroll 事件 在本示例代码中,我们使用原生 js 来写 scroll...

    原生javascript开发打字游戏---代码重构版本

    原生javascript开发打字游戏---代码重构版本,没有canvas,动态生成div,删除div,增加div的top属性值,window.addEventListener('keydown',function(e){})完成键盘事件判断。希望对你们有一点帮助

    原生js延迟加载

    在JavaScript的世界里,延迟加载(Lazy Loading)是一种优化网页性能的技术,它允许我们仅在真正需要时才加载资源,如图片、脚本或视频。这种技术可以显著减少初始页面加载时间,提高用户体验,并减少服务器压力。...

    简单原生js文字向上滚动消息框代码

    这个"简单原生js文字向上滚动消息框代码"提供了一种实现方式,它不依赖于任何JavaScript库如jQuery,而是完全基于原生JavaScript编写,这使得它在性能和加载速度上具有优势。 首先,`index.html`是网页的主文件,它...

    原生js图片实时加载

    预加载是图片实时加载的一种策略,它在页面加载时就开始加载图片,以便用户在需要时可以快速显示。在JavaScript中,可以使用`new Image()`创建一个新的Image对象,然后设置其`src`属性为需要加载的图片URL,如下所示...

    原生js图片滚动插件新浪电影大片首页焦点图片滚动切换效果代码

    本教程将详细讲解如何利用原生JavaScript实现一个类似新浪电影大片首页的焦点图片滚动切换效果。 首先,我们需要理解焦点图(Slider)的基本原理。焦点图是一种网页设计元素,用于展示一组图片或内容,并通过自动或...

    js页面图片延迟加载.zip

    这种技术的核心思想是只加载用户当前视口内的图片,当用户滚动页面时,那些还未进入视口的图片才会按需加载。在标题"js页面图片延迟加载.zip"中,我们可以推测这个压缩包可能包含了一个JavaScript实现的图片延迟加载...

    原生js scrollbars滚动条插件设置浏览器竖直滚动条美化.rar

    原生JS(JavaScript)滚动条插件能够帮助开发者自定义和美化浏览器的默认滚动条,使其符合网站的整体风格。本资源包“原生js scrollbars滚动条插件设置浏览器竖直滚动条美化”提供了一套解决方案,专用于竖直滚动条...

    原生js滚动到底部加载数据Scrollload.zip

    gzip后不到3k)、可配置性高(可以自定义加载时候动画、加载完后的dom、提前加载的距离)、可扩展性强大(很方便做到指定容器内的滚动、多tab的滚动、异常处理、刷新重新加载等)、性能好(在滚动的时候做了一些性能...

    原生JS左右滚动焦点图.zip

    总的来说,原生JS左右滚动焦点图是一个结合了DOM操作、事件处理、动画制作等多个JavaScript核心概念的实践案例,对于提升JavaScript编程能力非常有帮助。通过学习和理解这一技术,开发者能够更熟练地驾驭网页动态...

    HTML延迟加载图片 html图片延迟加载技术大全.zip

    HTML延迟加载图片,也称为懒加载(Lazy Load),是一种优化网页性能的技术,它允许网页只在需要时才加载图片,而不是一次性加载所有内容。这种技术对于拥有大量图片的页面尤其有益,因为它可以显著减少页面的初始...

    原生JS实现无缝滚动轮播图(附加无注释版+详解版)

    在原生JS实现过程中,我们需要关注以下几个核心知识点: 1. **DOM操作**:使用`document.getElementById`、`querySelector`或`querySelectorAll`等方法获取HTML元素,以及`appendChild`、`removeChild`、`...

Global site tag (gtag.js) - Google Analytics