Backbone.js与jQuery的Lazy加载插件
Backbone.js with Lazy Load Plugin for jQuery
我有一个包含require.js和undercore.js的Backbone.js应用程序。现在我想使用带有Eislider横幅的jquery懒惰加载插件。
在应用延迟加载脚本之前,横幅效果良好。
这就是我在主干视图中所做的:
render: function(options){
var _banner = _.template(BaTem);
var homebanner = new ProWeb();
homebanner.getPrCallBack(this.options.type, function(result) {
$(this.el).html(_banner({type : this.options.type,result:result}));
$("img.lazy").lazyload({
event : "click"
});
}.bind(this));
return this;
}
这是使用text.js 在html文件中的模板
<ul class="ei-slider-large">
<li>
<img class="lazy" data-original=images/05056ba1e25.png" alt="slide show" width="640" height="480"/>
<a href="#itemDet">
<img class="lazy" data-original=images/05056ba1e25.png" alt="slide show" width="640" height="480"/>
</a>
<a href="#item">
<img class="lazy" data-original=images/05056ba1e25.png" alt="slide show" width="640" height="480"/>
</a>
</li>
</ul>
应用延迟加载脚本后,图像将停止显示。
知道是什么原因造成的吗。
您对.bind()的调用似乎有点错误。也许可以尝试Underscore _bindAll()在回调中获取上下文:
render: function(options) {
var _banner = _.template(BaTem);
var homebanner = new ProWeb();
_.bindAll(homebanner, 'getPrCallBack');
homebanner.getPrCallBack(this.options.type, function(result) {
$(this.el).html(_banner({type : this.options.type,result:result}));
$("img.lazy").lazyload({
event : "click"
});
});
return this;
}
http://underscorejs.org/#bindAll
将对象上由methodNames指定的多个方法绑定到无论何时调用它们,都将在该对象的上下文中运行。非常方便绑定将用作事件的函数处理程序,否则会用一个相当无用的this调用这些处理程序。methodNames是必需的。
这有帮助吗?
我强烈建议不要使用jQuery lazyload和类似的插件,尤其是在高度动态的网页上。jQuery lazyload通常速度较慢,但每次运行$("img.lazy").lazyload();
时,都会创建一个新的Observer/Lazylod实例,其中强烈引用了您放入的所有图像。
虽然您可以稍微改进一下,但通过提供更具体的上下文:$("img.lazy", this.el).lazyload();
,它仍然效率很低。
一般来说,我认为,您需要触发一个合成滚动事件:
$(this.el).html(_banner({type : this.options.type,result:result}));
$("img.lazy", this.el).lazyload({event : "click"});
$(window).trigger("scroll");
但是,我建议您尝试使用lazySizes,而不是这样做并使用jQuerylazyload。我在开发它时考虑到了动态页面和SPAs。您将不需要调用特殊函数或在渲染函数内触发事件(=您可以简单地删除对$.lazylod的调用)(这有助于分离关注点)。
您只需要将脚本添加到页面中,并使用data-src
而不是data-original
,使用类lazyload
而不是lazy
(当然,您也可以配置选项,这样您甚至不需要更改标记)。
<ul class="ei-slider-large">
<li>
<img class="lazyload" data-src=images/05056ba1e25.png" alt="slide show" width="640" height="480"/>
<a href="#itemDet">
<img class="lazyload" data-src=images/05056ba1e25.png" alt="slide show" width="640" height="480"/>
</a>
<a href="#item">
<img class="lazyload" data-src=images/05056ba1e25.png" alt="slide show" width="640" height="480"/>
</a>
</li>
</ul>
此外:Eislider横幅似乎需要你的图像大小才能正常工作。这意味着您需要定义宽度和高度,然后才能通过CSS加载它们。如果这些图像是静态的(即:640x480),则不需要更改任何内容。如果你有一个带有响应图像的响应布局,你需要使用CSS内在模式来解决这个问题。
这可能看起来像这样:
.ei-slider-large li {
position: relative;
height: 0;
padding-bottom: 75%;
width: 100%;
}
.ei-slider-large img {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
我相信你会喜欢的。
- 如何使用url加载程序在webpack中导入多个图像
- 如何在生成下载文件时显示加载动画
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Emberjs应用程序加载在除Index之外的所有路由上
- 在chrome.tabs.onCreated之后加载HTML页面
- 单击F5时如何停止页面加载
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 跟踪在页面加载时应用内联样式的JavaScript
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- jQuery Lazy加载动画滚动
- Html页面上的多个Base64图像和平滑加载
- 如何创建带有插槽的vue js组件预加载程序
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 如何使该数据在所有元素中加载
- Chrome扩展没有't在重新加载之前考虑期权价值
- 使用javascript在Flash中加载外部图像
- Backbone.js与jQuery的Lazy加载插件
- DOJO:LazyTreeGrid中的Lazy加载节点-查找示例代码
- 向下滚动加载引导程序模型的数据(Lazy Load)