angularjs如何实现图片延迟加载?
2个回答
展开全部
jquery的做法是监听window.scroll,然后判断图片的位置,是否需要切换src属性,那么angular也一样,只是由于angular需要将DOM操作写在指令里面,所以需要自己去实现指令。
解决思路:
1,图片的src不要使用真实的地址,用一个属性保存在元素上
2,把所有需要使用延迟加载的图片放到一个数组中,
3,初始化的时候检查数组中的元素是否在可视范围内,可视范围内即加载
4,给window绑定滚动事件检查图片是否在可视范围内
5,加载完成的图片从队列中删除
解决思路:
1,图片的src不要使用真实的地址,用一个属性保存在元素上
2,把所有需要使用延迟加载的图片放到一个数组中,
3,初始化的时候检查数组中的元素是否在可视范围内,可视范围内即加载
4,给window绑定滚动事件检查图片是否在可视范围内
5,加载完成的图片从队列中删除
2016-01-14 · 知道合伙人互联网行家
关注
展开全部
jquery的做法是监听window.scroll,然后判断图片的位置,是否需要切换src属性,那么angular也一样,只是由于angular需要将DOM操作写在指令里面,所以需要你自己去实现指令,大概思路如下;
全选复制放进笔记<lazyload>
<img data-source="real.png" src="holder.png" />
</lazyload>
angular.module('yourapp').directive('lazyload', function () {
return {
restrict: 'EA',
replace: false,
link: function (scope, element, attrs) {
angular.element(window).on('scroll', function() {
// 计算距离 切换img属性
});
}
};
});
如果希望效率像jquery一样,只有一个监听,那么这个lazyLoad的逻辑需要考虑如何查询
如果希望简单省事,指令直接写在img属性这一层就行了,只是这样会注册和图片一样多的事件回调。
全选复制放进笔记<lazyload>
<img data-source="real.png" src="holder.png" />
</lazyload>
angular.module('yourapp').directive('lazyload', function () {
return {
restrict: 'EA',
replace: false,
link: function (scope, element, attrs) {
angular.element(window).on('scroll', function() {
// 计算距离 切换img属性
});
}
};
});
如果希望效率像jquery一样,只有一个监听,那么这个lazyLoad的逻辑需要考虑如何查询
如果希望简单省事,指令直接写在img属性这一层就行了,只是这样会注册和图片一样多的事件回调。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询