1/** 2 * @author littenli 3 * @date 2014-03-10 version 0.2 4 * @description å¾çå»¶æ¶å è½½ï¼è£å¾æ¿æ¢ï¼å¾çéè¯¯ä¸æ¥å¤ç 5 * @update å¢å éå¯è§åºåå»¶æ¶å è½½ 6 * @example $(".container").lazy(options); 7 * éå$(".container")èç¹å çimgèç¹ï¼é½åºç¨lazyloadï¼è¥æ¤èç¹ä¸ºimgèç¹ï¼åªåºç¨æ¤èç¹ 8 * options.srcSign {String} å¯ä¸ºç©º.imgèç¹çº¦å®çsrcæ å¿ï¼é»è®¤ä¸ºlazy-srcï¼ååºimgèç¹ä¸ºï¼<img lazy-src="img/hello.jpg" /> 9 * options.errCallBack {Function} å¯ä¸ºç©º.æä¾imgå 载失败åè°ï¼ä¾ä¸å¡é¢å¤å»å¤çå 载失败é»è¾ 10 * options.container {Dom} æä¾å®¹å¨èç¹å å¯è§åºåçå è½½è½åï¼é»è®¤ä¸ºwindow 11 */ 12(function (root, factory) { 13 if (typeof define === 'function' && define.amd) { 14 define(['jquery'], factory); 15 } else { 16 factory(root['jQuery']); 17 } 18}(this, function ($) { 19 20 $.fn.lazyload = function(options) { 21 return this.each(function() { 22 23 options = options || {}; 24 var defualts = {}; 25 26 var opts = $.extend({}, defualts, options); 27 var obj = $(this); 28 var dom = this; 29 30 var srcSign = options.srcSign || "lazy-src"; 31 var errCallBack = options.errCallBack || function(){}; 32 var container = options.container || $(window); 33 34 /** 35 * @description srcæ£å¸¸ 36 */ 37 var imgload = function (e, target) { 38 //todo: 䏿¥ 39 } 40 41 /** 42 * @description src失æ 43 */ 44 var imgerr = function (e, target, fn, src) { 45 if(target[0].src && (target[0].src.indexOf("img-err.png")>0 || target[0].src.indexOf("img-err2.png")>0)){ 46 return ; 47 } 48 var w = target.width(); 49 var h = target.height(); 50 target[0].src = "/img/img-err.png"; 51 52 fn(); 53 //todo: 䏿¥ 54 }; 55 56 var tempImg = function(target){ 57 var w = target.width(); 58 var h = target.height(); 59 var t = target.offset().top; 60 var l = target.offset().left; 61 var tempDom = target.clone().addClass("lazy-loding").insertBefore(target); 62 tempDom[0].src = "/img/img-loading.png"; 63 target.hide(); 64 } 65 /** 66 * @description srcæ¿æ¢ï¼loadingè¿ç¨ä¸æ·»å ç±»lazy-loading; 67 */ 68 var setSrc = function(target, srcSign, errCallBack){ 69 70 if(target.attr("src"))return ; 71 72 if(options.cache == true){ 73 console.log(target); 74 //åè¿localstorage 75 var canvas1 = document.getElementById('canvas1'); 76 var ctx1 = canvas1.getContext('2d'); 77 var imageData; 78 79 image = new Image(); 80 image.src = target.attr(srcSign); 81 image.onload=function(){
82 ctx1.drawImage(image,0,0); 83 imageData = ctx1.getImageData(0,0,500,250); 84 console.log(imageData); 85 } 86 87 }else{ 88 tempImg(target); 89 90 var src = target.attr(srcSign); 91 target[0].onerror = function (e) { 92 imgerr(e, target, errCallBack, src); 93 }; 94 target[0].onload = function (e) { 95 target.parent().find(".lazy-loding").remove(); 96 target.show(); 97 imgload(e, target); 98 } 99 target[0].src = src; 100 } 101 } 102 103 /** 104 * @description éç» 105 */ 106 opts.cache = []; 107 108 if(dom.tagName == "IMG"){ 109 var data = { 110 obj: obj, 111 tag: "img", 112 url: obj.attr(srcSign) 113 }; 114 opts.cache.push(data); 115 }else{ 116 var imgArr = obj.find("img"); 117 imgArr.each(function(index) { 118 var node = this.nodeName.toLowerCase(), url = $(this).attr(srcSign); 119 //éç» 120 var data = { 121 obj: imgArr.eq(index), 122 tag: node, 123 url: url 124 }; 125 opts.cache.push(data); 126 }); 127 } 128 129 130 //卿æ¾ç¤ºæ°æ® 131 var scrollHandle = function() { 132 var contHeight = container.height(); 133 var contop; 134 if ($(window).get(0) === window) { 135 contop = $(window).scrollTop(); 136 } else { 137 contop = container.offset().top; 138 } 139 $.each(opts.cache, function(i, data) { 140 var o = data.obj, tag = data.tag, url = data.url, post, posb; 141 if (o) { 142 post = o.offset().top - contop, post + o.height(); 143 144 if ((post >= 0 && post < contHeight) || (posb > 0 && posb <= contHeight)) { 145 if (url) { 146 //卿µè§å¨çªå£å 147 if (tag === "img") { 148 //æ¹åsrc 149 setSrc(o, srcSign, errCallBack); 150 } 151 } 152 data.obj = null; 153 } 154 } 155 }); 156 } 157 158 //å è½½å®æ¯å³æ§è¡ 159 scrollHandle(); 160 //æ»å¨æ§è¡ 161 container.bind("scroll", scrollHandle); 162 container.bind("resize", scrollHandle); 163 164 }); 165 }; 166 167}));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.