84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
写一个移动端显示图片列表的web,以往都是使用jQuery的延迟加载插件来实现这一功能的,但是现在要求不能使用jQuery以及其他插件,仅使用angularjs实现这个功能。图片的路径是存储在一个json中,通过读取json的数据ng-repeat出来的。请问有什么好的解决方法?
https://github.com/Treri/me-lazyloadhttps://github.com/Treri/me-lazyimg
两个功能差不多, 前面那个是放在document中滚动的, 后面那个是可以设置在一个element中滚动的
思路:1,图片的src 不要使用真实的地址,用一个属性保存在元素上2,把所有需要使用延迟加载的图片放到一个数组中,3,初始化的时候检查数组中的元素是否在可视范围内,可视范围内即加载4,给 window 绑定滚动事件检查图片是否在可视范围内5,加载完成的图片从队列中删除
原文链接:https://www.npmjs.com/package/angular-imglazyload
jquery的做法是监听window.scroll,然后判断图片的位置,是否需要切换src属性,那么angular也一样,只是由于angular需要将DOM操作写在指令里面,所以需要你自己去实现指令,大概思路如下;
html
javascriptangular.module('yourapp').directive('lazyload', function () { return { restrict: 'EA', replace: false, link: function (scope, element, attrs) { angular.element(window).on('scroll', function() { // 计算距离 切换img属性 }); } }; });
javascript
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如果希望简单省事,指令直接写在img属性这一层就行了,只是这样会注册和图片一样多的事件回调
http://afklm.github.io/ng-lazy-image/ 这个module很多人都做好了 这个链接的看起来不错 使用很方便
应该是用$timeout来延迟加载
https://github.com/Treri/me-lazyload
https://github.com/Treri/me-lazyimg
两个功能差不多, 前面那个是放在document中滚动的, 后面那个是可以设置在一个element中滚动的
思路:
1,图片的src 不要使用真实的地址,用一个属性保存在元素上
2,把所有需要使用延迟加载的图片放到一个数组中,
3,初始化的时候检查数组中的元素是否在可视范围内,可视范围内即加载
4,给 window 绑定滚动事件检查图片是否在可视范围内
5,加载完成的图片从队列中删除
原文链接:https://www.npmjs.com/package/angular-imglazyload
jquery的做法是监听window.scroll,然后判断图片的位置,是否需要切换src属性,那么angular也一样,只是由于angular需要将DOM操作写在指令里面,所以需要你自己去实现指令,大概思路如下;
如果希望效率像jquery一样,只有一个监听,那么这个lazyLoad的逻辑需要考虑如何查询IMG
如果希望简单省事,指令直接写在img属性这一层就行了,只是这样会注册和图片一样多的事件回调
http://afklm.github.io/ng-lazy-image/ 这个module很多人都做好了 这个链接的看起来不错 使用很方便
应该是用$timeout来延迟加载