zepto.js:视口和延迟加载插件?

Posted

技术标签:

【中文标题】zepto.js:视口和延迟加载插件?【英文标题】:zepto.js: Viewport and Lazyload plugins? 【发布时间】:2012-07-03 20:00:53 【问题描述】:

我曾经使用 jQuery 并且正在使用

jQuery LazyLoad Pluginhttp://www.appelsiini.net/projects/lazyload jQuery Viewport Pluginhttp://www.appelsiini.net/projects/viewport

我现在使用 zepto.js 而不是 jQuery,当然现在插件都出现以下错误。

Uncaught ReferenceError: jQuery is not defined

如果我将两个插件从 )(jQuery); 更新为 )(Zepto);,则会出现以下错误……

未捕获的类型错误:无法读取未定义的属性 ':'

对此有什么想法吗?是否可以使这些插件与 Zepto 一起使用? Zepto 不是与 Jquery 几乎相同,只是没有旧的浏览器兼容性和额外的触摸事件吗?

提前谢谢你。

马特

【问题讨论】:

或者有人知道图像的无依赖延迟加载 javascript 吗?我只想为我的网站使用一个良好且有效的延迟加载脚本,并使用 zepto 而不是 jquery。 因为我也和 Zepto 一起工作,所以我会看看。无论如何,视口选择器还是有些人喜欢的,并且便利的方法将从延迟加载中删除,因为我觉得大多数人不使用它们(而且它们在视口插件中仍然可用)。 【参考方案1】:

导致错误的行似乎是:

.extend($.expr[':'], 

jQuery 使用自己的 CSS 样式选择器评估器,称为 Sizzle。除了让您使用$('#id .cls1 .cls2, #otherid') 和标准CSS 伪选择器外,它还支持使用自定义选择器进行扩展,例如内置的:visible 选择器或此插件提供的:above-the-fold 选择器。

由于现代移动浏览器支持原生 document.querySelectorAll 函数进行 CSS 选择,因此不需要像 Sizzle 这样的库,从而节省了大量 JavaScript。 (这就是我们喜欢 Zepto 的原因。)副作用是这些自定义选择器不受支持,$.expr 不存在。任何依赖于这些的行,包括插件中的那一行都会失败。

好消息是这些是便利的选择器,您可以将它们从您的脚本中删除。如果您不想以这种方式查找折叠上方和下方的元素,则可以将它们从代码中删除。您还需要解决库调用$this.is(":visible") 的行,但除此之外,我真的没有看到任何与 jQuery 相关的内容。

【讨论】:

【参考方案2】:

你还需要处理 $window.scrollLeft(),它在 Zepto 中没有实现(你可以使用 window.pageXOffset)。

我已经在我的分支上实现了完全的 Zepto 兼容性:https://github.com/adamvert/jquery_lazyload

【讨论】:

以上是关于zepto.js:视口和延迟加载插件?的主要内容,如果未能解决你的问题,请参考以下文章

带有语义标记的延迟图像加载

Chrome 中的本机延迟加载

图片延迟加载(lazyload)

lazysizes-好用的延迟加载JS插件

jQuery图片延迟加载插件jQuery.lazyload

实现图片的预加载和懒加载