JavaScript 學習筆記之一jQuery寫法圖片等比縮放以及預加載
以前對於JavaScript總是在用到的時候在頁面上寫幾個函數,基本沒考慮到函數的封裝與重用,最近有個項目可能對於這方面要求有點高,所以就研究了下類似jQuery的封裝。
這里就圖片等比縮放以及預加載的效果來嘗試下,寫寫類似的JavaScript代碼。
圖片等比縮放以及預加載的效果如下(預加載效果有時候會不是很明顯):
JS主要代碼如下:
(function() { var yQuery = (function() { var yQuery = function() { return yQuery.fn.init(); }; yQuery.fn = yQuery.prototype = { init: function() { return this; }, //圖片等比縮放以及預加載方法申明 但是感覺這樣寫(return new imgResizeBox(e))很別扭 請高手賜教 imgResize: function(e) { return new imgResizeBox(e); } }; //image圖片處理 var imgResizeBox = function(e) { //image參數 setting = { imgId: "", //圖片的容器的ID 比如.viewArea img height: 0, width: 0, loading: "images/lightbox-ico-loading.gif" }; $.extend(setting, e, setting); //參數替換 var images = $(setting.imgId); //獲取所有圖片 $(images).hide(); //隱藏 var loading = new Image(); //預加載圖片 loading.className = "loading"; loading.src = setting.loading; $(images).after(loading); //預加載函數 var perLoading = function($this) { var img = new Image(); img.src = $this.src; if (img.complete) { computeImg.call($this); return; }; img.onload = function() { computeImg.call($this); img.onload = function() { }; }; }; //圖片縮放處理,以及圖片顯示函數 var computeImg = function() { var m = this.height - setting.height; var n = this.width - setting.width; if (m > n) this.height = this.height > setting.height ? setting.height : this.height; else this.width = this.width > setting.width ? setting.width : this.width; $(this).next(".loading").remove(); $(this).show(); }; //循環調用預加載函數 return $(images).each(function() { perLoading(this); }); } return yQuery; })(); window.yQuery = window.$$ = yQuery(); })();
調用代碼如下:
$(document).ready(function() { $$.imgResize({ imgId: ".viewArea img", height:160, width:270, loading: "http://pic002.cnblogs.com/images/2012/155618/2012062710243954.gif" }); });