閉包,jQuery插件的寫法:圖片預加載
阿新 • • 發佈:2017-08-23
{} 傳遞參數 參數傳遞 通過 閉包 tle ogre 情況 比較
最近做的一些網頁,單個網頁圖片量都比較大,網絡不好的情況下,特別卡,這個圖片預加載的方法可以犧牲一些時間換來網頁的瀏覽順暢,還是值得的。
//閉包的寫法,它內部的變量都是局部的,不會和外部巳有的變量進行沖突 ( function (通過它來接收對象) { } )( 通過它來傳遞對象 );//可以使用jQuery的$符號的閉包插件的寫法: //寫插件的常用方法 $.extentd() (function ($){ //構造函數 function PreLoad(imgs,options){ this.imgs = (typeOf === ‘string‘) ? [imgs] : imgs;//生成一個新的對象,將後一個覆蓋前一個返回一個新對象 this.opts = $.extend({},PreLoad.DEFAULTS, options); //無序加載方法,方法加下劃線表明這個方法只在內部使用 this._unoredered(); } //定義默認參數,如果沒有傳過來參數,可以使用 PreLoad.DEFAULTS = { each: null, //方法,每一張加載完畢後執行 all: null//所有圖片加載完畢後執行 } //面向對象的方法都寫在原型上,可以比較方法的實例化 PreLoad.prototype._unoredered = function(){ //無序加載 var imgs = this.imgs, opts = this.opts, count = 0, len = imgs.lenght; $.each(imgs, function(i,src){//判斷src是否為字符串,如果不是,就直接返回 if(typeof src != ‘string‘) return; var imgObj = new Images(); //load 全部加載完 error 有發生錯誤時 $(imgObj).on(‘load error‘,function(){ //判斷 opts是否存在,每一次加載的圖片數量 count opts.each && opts.each(count); if(count >= len - 1){ //如果 opts.all存在就去執行它 opts.all && opts.all(); } count ++; }); //把src給img對象中的src賦值 imgObj.src = src; }); }; //上面是插件中的方法已經寫完了,下面是怎麽把上面的方法變為一個可用的插件 //調用方法一般有兩種 //附在$.fn後面 //$.fn.extend -> $(‘#id‘).preload(); //另一種是跟在jQuery對象上的,它的形式就是個工具函數,常用的也是這種工具函數 //$.extend -> $.preload(); //這個插件按標準來應該這樣寫 $.extend({ //插件名稱及傳遞的參數,這樣這個插件就完寫了 preload: function(imgs, opts){ //實例化構造函數,並將參數傳遞進來 new PreLoad(imgs, opts); } }); })(jQuery);</script>
如何使用它呢?
//調用這個插件 <script> var = imgs = [ ‘1.jpg‘, ‘2.png‘, ‘3.jpg‘ ]; //給插件傳遞參數,一個為數組,另一個為一個參數列表 $.preload(imgs, { //每加載完一張圖片之後執行的方法 each: function(count){ //每一次都需要更新一次加載進度 $progress.html(Math.round((count + 1) / len * 100 + ‘%‘); }, //所有圖片加載完畢後執行的方法 all: function(){ //loading 隱藏,另,加載的圖片數量顯示 $(‘.loading‘).hide(); document.title = ‘1/‘ + len; } }) </script>
可以直接拿來用!
閉包,jQuery插件的寫法:圖片預加載