jquery.datalazyload.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * 数据延迟加载jQuery插件
  3. * Copyright: Leepy
  4. * Update: 2010-05-15
  5. * Home: http://www.cnblogs.com/liping13599168/
  6. */
  7. (function($) {
  8. //包装延迟加载容器
  9. $.fn.wraplazyload = function(value) {
  10. this.html('<textarea class="text-lazyload">' + value + '</textarea>');
  11. };
  12. //开始进行延迟加载
  13. $.fn.datalazyload = function(options) {
  14. var settings = {
  15. dataContainer: '.text-lazyload',
  16. dataItem: '.item-lazyload',
  17. loadType: 'item', //可以为item(条目加载),img(图片加载)
  18. container: window,
  19. event: 'scroll',
  20. effect: 'normal', //效果类型
  21. effectTime: 1000, //效果持续时间
  22. position: 'vertical' //可以为vertical(垂直加载),horizontal(水平加载)
  23. };
  24. if (options) {
  25. $.extend(settings, options);
  26. }
  27. var dataContainer = this.find(settings.dataContainer);
  28. if (dataContainer.length == 0) {
  29. alert('请先包装延迟加载的容器.');
  30. }
  31. dataContainer.each(
  32. function() {
  33. var content = $('<div>' + $(this).val().replace(/src=/gi, 'dynamic=') + '</div>');
  34. $(this).after(content);
  35. var element = settings.loadType == 'item' ? content.find(settings.dataItem) : (settings.loadType == 'image' ? content.find('img') : null);
  36. element.each(function() { $(this).css('visibility', 'hidden'); }); //为了兼容非IE浏览器对visibilty的识别
  37. if (element == null) {
  38. alert('未引用对象实例.');
  39. return;
  40. }
  41. $(settings.container).bind(settings.event, function(event) {
  42. var pixel = 0;
  43. if (settings.position == 'vertical') {
  44. pixel = $(settings.container).height() + $(settings.container).scrollTop();
  45. }
  46. else if (settings.position == 'horizontal') {
  47. pixel = $(settings.container).width() + $(settings.container).scrollLeft();
  48. }
  49. element.each(function() {
  50. if ($(this).css('visibility') != 'visible' &&
  51. (settings.position == 'vertical' && pixel >= $(this).offset().top
  52. || settings.position == 'horizontal' && pixel >= $(this).offset().left)) {
  53. $(this).css('visibility', 'visible');
  54. if (settings.effect == 'fadeIn') {
  55. $(this).hide();
  56. $(this)[settings.effect](settings.effectTime);
  57. }
  58. if (settings.loadType == 'item')
  59. $(this).html($(this).html().replace(/dynamic=/gi, 'src='));
  60. else if (settings.loadType == 'image')
  61. $(this).attr('src', $(this).attr('dynamic')).removeAttr('dynamic');
  62. }
  63. });
  64. });
  65. //初次加载数据触发事件
  66. $(settings.container).trigger(settings.event);
  67. }
  68. );
  69. dataContainer.remove();
  70. };
  71. })(jQuery);