| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | (function($, window, document) {	var ImageLazyload = $.Lazyload.extend({		init: function(element, options) {			this._super(element, options);		},		_init: function() {			this.options.selector = '[data-lazyload]';			this._super();		},		_set: function(element, uri) {			if (element.tagName === 'IMG') {				element.src = uri;			} else {				element.style.backgroundImage = "url(" + uri + ")";			}		},		_hasPlaceholder: function(element) {			if (element.offsetWidth) {				if (element.tagName === 'IMG') {					return !!element.src;				} else {					return !!element.style.backgroundImage;				}			}			return false;		},		_addPlaceHolder: function(element) {			var self = this;			if (element.tagName === 'IMG') {				self._counter++;				element.onload = function() {					self._counter--;					self.addCallback(element, self.handle);					this.onload = null;				};				self.onPlaceHolder(function(placeholder) {					self._set(element, placeholder);				});			} else {				element.style.backgroundImage = "url(" + self.options.placeholder + ")";			}		},		addElement: function(element) {			var self = this;			var uri = element.getAttribute('data-lazyload');			if (uri) {				if (self._hasPlaceholder(element)) {					self.addCallback(element, self.handle);				} else {					self.onPlaceHolder = self._createLoader(function(callback) {						var img = new Image();						var placeholder = self.options.placeholder;						img.src = placeholder;						img.onload = img.onerror = function() {							callback(placeholder);						};					});					self._addPlaceHolder(element);				}				return true;			}			return false;		},		set: function(element, uri) {			var self = this;			var img = new Image();			img.onload = function() {				self._set(element, uri);				$.trigger(self.element, 'success', {					element: element,					uri: uri				});			};			img.onerror = function() {				$.trigger(self.element, 'error', {					element: element,					uri: uri				});			};			img.src = uri;			element.removeAttribute('data-lazyload'); //只尝试一次,后续可能支持多次尝试		},		handle: function(element, key) {			var uri = element.getAttribute('data-lazyload');			if (uri) {				this.set(element, uri);				//element.parentNode.parentNode.setAttribute('data-lazyload', 'true'); //debug			}		},		destroy: function() {			this._super();			this.element.removeAttribute('data-imageLazyload');		}	});	$.fn.imageLazyload = function(options) {		var lazyloadApis = [];		this.each(function() {			var self = this;			var lazyloadApi = null;			if (self === document || self === window) {				self = document.body;			}			var id = self.getAttribute('data-imageLazyload');			if (!id) {				id = ++$.uuid;				$.data[id] = lazyloadApi = new ImageLazyload(self, options);				self.setAttribute('data-imageLazyload', id);			} else {				lazyloadApi = $.data[id];			}			lazyloadApis.push(lazyloadApi);		});		return lazyloadApis.length === 1 ? lazyloadApis[0] : lazyloadApis;	}})(mui, window, document);
 |