搜索
首页web前端js教程JavaScript实现页面滚动图片加载(仿lazyload效果)_javascript技巧

为什么写这篇文章?
  1.优化页面很实用的方法,技术实现不难;
  2.搜索了相关内容的文章,好像都是用jQuery的方法,可是如果不用jQuery的站长难道就不能用这种方法了么;
  3.做技术分享也是在让更多人帮自己测试,因为这个本人木有在项目中实际用到,都是自己琢磨的,所有如果有问题请大家指出,先谢谢了;
  4.这个月的博客还没写;
  5.刚好木有工作任务,此时不写更待何时...

  现在的页面大多都具有的特点 - 内容丰富,图片较多;像我们经常浏览的淘宝,京东,团购网站之类的(本人网购控,属于一个月不在网上花点钱就不痛快),一个页面几十张图片那叫毛毛雨,所以现在流行起了一个方法 - 滚动动态加载。这个方法能解决很大程度的HTTP请求,首先页面只加载窗口显示区的图片,只有等到页面滚动,且滚动到相应位置的时候再去加载图片,这样做网页加载快了(请求少了,加载的东西少了能不提快么)。在《高性能网站建设指南》第一章就说到,减少HTTP请求的重要性,这是提高网页前端性能,优化页面加载速度很实用的做法。

  原理:
1.给页面绑定滚动事件;
2.加载页面的时候把真正的图片地址放在某属性中;
3.然后再滚动过程中判断元素是否进入当前浏览器窗口内;
4.最后加载图片,当然加载什么,用什哪种用户体验都得由你决定;

  难点:
  浏览器兼容是造成难点的原因所在,DOM标准和IE标准,每天前端的工作都在和它们打交道。思考下面的几段代码
  1.window.pageYOffset ? window.pageYOffset : window.document.documentElement.scrollTop
目的:获得当前页面相对于窗口显示区左上角的 Y 位置.
DOM标准:window.pageYOffset;
IE标准:window.document.documentElement.scrollTop
  2.window.innerHeight ? window.innerHeight : document.documentElement.clientHeight
目的:声明了窗口的文档显示区的高度和宽度,以像素计.
DOM标准:innerheight 和 innerwidth;
IE标准:document.documentElement 或 ducument.body (与 DTD 相关)的 clientWidth 和 clientHeight 属性作为替代
  3.obj.getBoundingClientRect().top + window.document.documentElement.scrollTop + window.document.body.scrollTop
目的:获取页面元素的位置.
当浏览器为 非webkit内核 时,document.body.scrollTop值恒定为0,使用 document.documentElement.scrollTop才能取到正确值 ;
当浏览器为 webkit内核 时,document.documentElement.scrollTop值恒定为0,使用 document.body;
我还搜索到一种说法是和DTD相关(即 当页面指定了 DOCTYPE时,使用 document.documentElement ; 当页面没有指定了 DOCTYPE时,使用 document.body),请确定知道的朋友帮忙指出下,不胜感谢。
  细节:
1.因为真正的地址最初是在某属性中(默认是xsrc,可自己设置),所以默认的图片地址最好是一个像素的透明图片,这样可以避免在浏览器中出现红X;

2.在图片load的时候可以加入等待的图片,这样用户才会知道这里有图片需要加载,良好的用户体验是前端一直所追求的(例子中有体现);
3.在图片load成功后可以加入合适的显示效果(例子中木有体现,可以自己尝试);
JavaScript源码如下:

复制代码 代码如下:

var scrollLoad = (function (options) {
var defaults = (arguments.length == 0) ? { src: 'xSrc', time: 300} : { src: options.src || 'xSrc', time: options.time ||300};
var camelize = function (s) {
return s.replace(/-(\w)/g, function (strMatch, p1) {
return p1.toUpperCase();
});
};
this.getStyle = function (element, property) {
if (arguments.length != 2) return false;
var value = element.style[camelize(property)];
if (!value) {
if (document.defaultView && document.defaultView.getComputedStyle) {
var css = document.defaultView.getComputedStyle(element, null);
value = css ? css.getPropertyValue(property) : null;
} else if (element.currentStyle) {
value = element.currentStyle[camelize(property)];
}
}
return value == 'auto' ? '' : value;
};
var _init = function () {
var offsetPage = window.pageYOffset ? window.pageYOffset : window.document.documentElement.scrollTop,
offsetWindow = offsetPage + Number(window.innerHeight ? window.innerHeight : document.documentElement.clientHeight),
docImg = document.images,
_len = docImg.length;
if (!_len) return false;
for (var i = 0; i var attrSrc = docImg[i].getAttribute(defaults.src),
o = docImg[i], tag = o.nodeName.toLowerCase();
if (o) {
postPage = o.getBoundingClientRect().top + window.document.documentElement.scrollTop + window.document.body.scrollTop; postWindow = postPage + Number(this.getStyle(o, 'height').replace('px', ''));
if ((postPage > offsetPage && postPage offsetPage && postWindow if (tag === "img" && attrSrc !== null) {
o.setAttribute("src", attrSrc);
}
o = null;
}
}
};
window.onscroll = function () {
setTimeout(function () {
_init();
}, defaults.time);
}
};
return _init();
});
scrollLoad();
 
可传递一个参数设置src原地址和响应时间
复制代码 代码如下:

scrollLoad({
src:'userSrc', //字符串型
time: 100 //数字型
})
 
demo下载
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何优化Vue开发中的图片加载失败显示问题如何优化Vue开发中的图片加载失败显示问题Jun 29, 2023 am 10:51 AM

如何优化Vue开发中的图片加载失败显示问题在Vue开发中,经常会遇到需要加载图片的场景。然而,由于网络不稳定或者图片不存在的原因,很有可能会出现图片加载失败的情况。这样的问题不仅影响了用户体验,还可能导致页面呈现混乱或者出现空白的情况。为了解决这个问题,本文将分享一些优化Vue开发中图片加载失败显示的方法。使用默认图片:在Vue组件中,可以设置一个默认图片,

如何解决Edge浏览器无法加载图片的问题如何解决Edge浏览器无法加载图片的问题Jan 30, 2024 am 10:54 AM

edge浏览器图片加载不出来怎么办?edge浏览器是很多小伙伴用于上网的默认浏览器,可以为用户们提供便捷的上网服务。但有些小伙伴在上网的过程中,发现edge浏览器的网页中图片无法正常加载出来,在排除了网络问题之后,最大的可能是设置的问题,如果你想解决这个问题的话,就随小编一起来看看图片无法显示的解决方法吧。edge浏览器图片加载不出来怎么办1、点击左下角开始,右击“Microsoftedge”。2、选择“更多”,点击“应用设置”。3、下滑找到“图片”。4、将图片下方的开关打开即可。

Vue懒加载图片失败问题解决方案Vue懒加载图片失败问题解决方案Jun 29, 2023 pm 10:42 PM

Vue开发中如何解决图片懒加载失败的问题懒加载(LazyLoad)是现代Web开发中常用的优化技术之一,特别在加载大量图片和资源时,可以有效减轻页面的负担,提升用户体验。然而,在使用Vue框架进行开发时,有时候我们可能会遇到图片懒加载失败的问题。本文将介绍一些常见的问题和解决方案,以便开发者能够更好地应对这个问题。图片资源路径错误首先,我们需要确保图片资源

Win11微软商店图片加载不出来如何解决Win11微软商店图片加载不出来如何解决Jun 29, 2023 pm 03:43 PM

  Win11微软商店图片加载不出来如何解决?在微软商店里,我们可以轻松地搜索下载各种软件和游戏,但是近期有部分Win11用户发现电脑上的微软商店图片加载不出来了,十分影响使用体验,那么对于这一情况有没有什么方法可以解决呢?下面我们来看看小编是如何解决的吧。  Win11微软商店图片加载不出来的解决方法  1、右击下方的开始菜单进入。  2、点击选择网络和Internet进入。  3、可以查看自己的网络是否连接正常。  4、可以将网络配置从专用改成公用即可。

如何使用PHP开发缓存优化图片加载速度如何使用PHP开发缓存优化图片加载速度Nov 08, 2023 pm 05:58 PM

如何使用PHP开发缓存优化图片加载速度随着互联网的快速发展,网页加载速度成为用户体验的重要因素之一。而图片加载速度是影响网页加载速度的重要因素之一。为了加速图片的加载,我们可以使用PHP开发缓存来优化图片加载速度。本文将介绍如何使用PHP开发缓存来优化图片加载速度,并提供具体的代码示例。一、缓存的原理缓存是一种存储数据的技术,通过将数据临时保存在高速存储器中

JavaScript 如何实现页面滚动到顶部按钮功能?JavaScript 如何实现页面滚动到顶部按钮功能?Oct 19, 2023 am 11:16 AM

JavaScript如何实现页面滚动到顶部按钮功能?在网页设计中,有时我们需要一个可以快速返回页面顶部的功能,这样用户就不需要手动滚动页面了。这种功能通常通过一个“返回顶部”的按钮来实现。在本文中,我将向大家介绍如何使用JavaScript来实现这一功能,并提供详细的代码示例。首先,我们需要在HTML文件中添加一个按钮元素,用于触发返回顶部的功能。例如,可

解决网页图片无法加载的方法解决网页图片无法加载的方法Jan 08, 2024 pm 01:45 PM

很多小伙伴在用打开网页的时候,发现网页的图片加载不出来,显示一个×的标志,这是怎么一回事呢?可能是你的网速过低,等待一会就可以了,也可能是设置里面没有开启相关模式,下面就带来了网页图片加载不出来解决方法一起来看看吧。网页图片加载不出来:1、网速问题网页显示不出图片有可能是因为电脑的网速比较慢,电脑中开启的软件比较多,而我们访问的图片比较大,这就可能因为加载超时,导致图片显示不出来,可以将比较占网速的软件将关掉,可以去任务管理器查看一下。2、访问人数过多网页显示不出图片还有可能是因为我们访问的网页

win7浏览图片加载不出来怎么办win7浏览图片加载不出来怎么办Jul 19, 2023 pm 02:57 PM

当你浏览网页时,你有没有遇到过图片无法加载的情况,那么原因是什么呢?如果win7浏览图片无法加载怎么办?有这个问题的用户,看看下面小边为您分享win7浏览图片无法加载的解决方案。1.首先,我们首先确定网页是否设置了不显示图片。我们点击浏览器右上角的工具-Internet选项,然后切换到高级。如果我们把它拖到多媒体上,就会有一个显示图片的选项,这需要在前面勾选。2.接下来,让我们检查flashplayer版本是否是最新版本。检测方法。点击开始,然后选择控制面板,在控制面板中找到flashplaye

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。