`
hax
  • 浏览: 965079 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

图片lazyload兼容无脚本的小改进

阅读更多
刚刚改进了一下某个页面的图片lazyload功能。

原先是用jquery的lazyload插件的标准方式做的。有一个缺点是脚本不开启时图片都不显示了。

解决方法也不难,就是同时插一个noscript标签。lazyload插件官网给出的解决方案也是如此。
<img class="lazy" src="img/grey.gif" data-original="img/example.jpg"  width="640" heigh="480">
<noscript><img src="img/example.jpg" width="640" heigh="480"></noscript>

不过这个方式带来双份的代码,且还要额外的样式表切换(避免无脚本时也出现用于有脚本时的占位图片)。

其实脚本本来就可以做任何事情,我们完全可以直接提取noscript里的部分。以下是代码示例

1. 模板部分(Jade):

span.thumb
	if (imgSrc)
		if index >= 10
			noscript: img(src=imgSrc, alt='')
		else
			img(src=imgSrc, alt='')
	else
		img(src='default.png', alt='')

注:暂时设定了前10项不用lazyload。

2. 脚本部分:
script(src="jquery.lazyload.min.js")
script
	$(function(){
		var imgs = $('span.thumb:has(noscript:contains(img))')
		$(window).on('scroll', function(evt){
			var showImgs = imgs.filter(':in-viewport')
			showImgs.html(function(){ return $(this).find('noscript').text() })
			imgs = imgs.not(showImgs)
		})
	})

注:
:has(selector)是jQuery支持的伪类,表示子代元素必须匹配指定selector。
:contains(text)也是jQuery支持的伪类,表示元素包含指定的文本。因为noscript里的部分被作为文本节点,所以这里其实是比较随意的,比如<noscript>sex img</noscript>也会匹配。
:in-viewport是lazyload插件扩展的伪类,表示元素是否处于窗口可见区域。

当然以上的方式的缺点就是无法使用lazyload插件的标准方式和其他功能(比如渐现),但这足以作为一个PoC,我有空完善下再给lazyload作者发个pull request(或者哪位读者愿意做这个事情也很好啊)。



0
0
分享到:
评论

相关推荐

    动态加载的图片LazyLoad

    2. **事件监听**:可能由于JQuery.LazyLoad监听滚动事件的方式与浏览器的滚动机制不完全兼容,导致图片未能在正确的时间点加载。 3. **CSS和布局问题**:页面的CSS样式或布局设置可能会影响元素的可见性判断,使得...

    JQuery Lazyload加载图片实例

    **jQuery Lazyload 图片加载技术详解** 在网页设计中,图片是重要的元素之一,但大量图片的预加载可能会拖慢页面的加载速度,影响用户体验。为了解决这一问题,jQuery 提供了一个插件——jQuery Lazyload,它允许...

    JQuery LazyLoad 图片懒加载实例

    **jQuery LazyLoad 图片懒加载实例** 在网页设计中,图片加载是影响页面性能的关键因素。当页面包含大量图片时,一次性加载所有图片可能会导致页面加载速度变慢,用户体验下降。为了解决这一问题,我们可以使用`...

    fancybox与lazyload的兼容问题解决(fancybox放大图片显示错误)

    为了解决fancybox与lazyload的兼容性问题,需要修改lazyload的JavaScript代码逻辑,确保在替换图片`src`属性的同时更新fancybox的`href`属性。具体修改方法如下: ```javascript $("&lt;img/&gt;") .bind("load", ...

    图片延迟加载 lazyload

    jQuery.lazyload 是一个非常流行的 jQuery 插件,专门用于实现图片延迟加载功能。这个插件通过监听滚动事件来判断图片是否进入视口,一旦发现图片进入可视区域,它就会替换占位符,加载真实的图片资源。jQuery.lazy...

    jQuery_lazyload

    jQuery_lazyload是一个非常实用的JavaScript库,用于优化网页性能,特别是在处理大量图片或者内容时。这个插件的主要目的是延迟加载,即在用户滚动到页面的特定部分时才加载那些可视区域以外的内容,从而减少初次...

    lazyload 即时加载图片(鼠标滑动不同页面时,才加载相应图片)

    8. **插件使用**:"lazyload"插件的具体使用方法通常包括引入jQuery库和插件文件,然后通过jQuery选择器选中需要懒加载的图片元素,调用插件方法初始化设置。 在提供的压缩包文件中,"lazyload"可能是实现上述功能...

    lazyload.js演示页面

    标题中的“lazyload.js演示页面”表明这是一个关于延迟加载技术的示例,主要使用了名为“lazyload.js”的JavaScript库。延迟加载,或称为懒加载,是一种优化网页性能的策略,它只在用户滚动到视口附近的图片或内容时...

    jquery.lazyload图片预加载效果 jquery预加载

    《jQuery LazyLoad 图片预加载技术详解》 在网页设计中,图片的加载速度往往直接影响着用户体验。当页面中包含大量图片时,如果一次性全部加载,可能会导致页面加载时间过长,用户需要等待,这无疑降低了网站的可用...

    lazyload-2.x.zip

    jQuery LazyLoad插件是一个广泛使用的解决方案,它允许图片、iframe等元素在进入浏览器视口时才开始加载,从而显著减少了初次页面加载的时间。本文将详细介绍jQuery LazyLoad 2.x版本的API使用及实践应用。 一、...

    图片延迟加载,lazyload.js使用实例

    3. **加载图片**:如果图片完全或部分位于视口中,`lazyload.js`会替换图片的`src`属性,加载实际的图片资源。 ### 使用`lazyload.js` 1. **引入库文件**:首先需要在HTML文件中引入`lazyload.js`。通常,你可以...

    jquery.lazyload.js

    4. **适应性强**:jQuery.Lazyload.js兼容各种浏览器,包括较老版本的IE,这使得它能够在广泛的用户群体中保持良好的性能。 5. **易于集成和定制**:作为基于jQuery的插件,jQuery.Lazyload.js拥有丰富的API和配置...

    lazyload.js图片延迟加载(懒加载)插件

    资源包内不仅提供了核心的lazyload.js脚本,还提供了一个演示示例(Demo),帮助开发者理解如何正确地使用这个插件。 **标签解读:** - **懒加载**:这是一种网页优化策略,只在需要时加载资源,如图片、视频等,...

    lazyload.js实现图片异步延迟加载

    `lazyload.js`是一个轻量级、高性能的JavaScript库,专门用于实现图片和其他元素的延迟加载。它具有以下特点: - **简单易用**:只需几行代码即可集成到项目中。 - **兼容性好**:支持所有现代浏览器,包括IE9及...

    magento lazyload插件

    总之,Magento LazyLoad插件是提升Magento店铺性能的有效工具,通过智能管理图片加载,为用户带来流畅的浏览体验,同时也有助于网站的SEO优化。正确安装和配置该插件,可以为电商网站的运营带来显著的积极影响。

    js lazyLoad 图片懒加载demo

    描述中提到的"应用lazyload.js 插件实现图片懒加载",意味着这个项目的核心是通过`lazyload.js`来处理网页上的图片加载。在网页加载时,非首屏的图片不会立即下载,而是等待用户滚动到图片所在位置时才开始加载。...

    jQuery.lazyload-1.7.2

    5. **兼容性**:jQuery.lazyload 1.7.2版本应与大部分现代浏览器兼容,包括IE8及更高版本,这得益于其基于jQuery的构建,jQuery自身已经很好地处理了跨浏览器的问题。 6. **性能优化**:此插件使用节流和防抖技术来...

    jquery lazyload延时加载

    jQuery LazyLoad 实现了图片的延时加载(也称为懒加载),即只有当图片进入用户可视区域时,才会开始加载,这样可以显著减少页面初次加载时的流量,并提高页面加载速度。 **一、jQuery LazyLoad 基本原理** 1. **...

    jquery.lazyload 实现图片延迟加载

    **jQuery LazyLoad 插件详解:实现图片延迟加载** 在网页设计中,为了提升用户体验,减少页面初次加载的时间,一种常见的优化策略是采用图片延迟加载(Image Lazy Load)技术。`jQuery LazyLoad` 是一个非常实用的 ...

Global site tag (gtag.js) - Google Analytics