偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JavaScript實現(xiàn)頁面滾動圖片加載

開發(fā) 前端
現(xiàn)在的頁面大多都具有的特點 - 內(nèi)容豐富,圖片較多;像我們經(jīng)常瀏覽的淘寶,京東,團(tuán)購網(wǎng)站之類的,一個頁面幾十張圖片那叫毛毛雨,所以現(xiàn)在流行起了一個方法 -滾動動態(tài)加載。

 

為什么寫這篇文章?

1.優(yōu)化頁面很實用的方法,技術(shù)實現(xiàn)不難;

2.搜索了相關(guān)內(nèi)容的文章,好像都是用jQuery的方法,可是如果不用jQuery的站長難道就不能用這種方法了么;

3.做技術(shù)分享也是在讓更多人幫自己測試,因為這個本人沒有在項目中實際用到,都是自己琢磨的,所有如果有問題請大家指出,先謝謝了;

現(xiàn)在的頁面大多都具有的特點 - 內(nèi)容豐富,圖片較多;像我們經(jīng)常瀏覽的淘寶,京東,團(tuán)購網(wǎng)站之類的(本人網(wǎng)購控,屬于一個月不在網(wǎng)上花點錢就不痛快),一個頁面幾十張圖片那叫毛毛雨,所以現(xiàn)在流行起了一個方法 - 滾動動態(tài)加載。這個方法能解決很大程度的HTTP請求,首先頁面只加載窗口顯示區(qū)的圖片,只有等到頁面滾動,且滾動到相應(yīng)位置的時候再去加載圖片,這樣做網(wǎng)頁加載快了(請求少了,加載的東西少了能不提快么)。在《高性能Web開發(fā)指南》***章就說到,減少HTTP請求的重要性,這是提高網(wǎng)頁前端性能,優(yōu)化頁面加載速度很實用的做法。

原理:

1.給頁面綁定滾動事件;

2.加載頁面的時候把真正的圖片地址放在某屬性中;

3.然后再滾動過程中判斷元素是否進(jìn)入當(dāng)前瀏覽器窗口內(nèi);

4.***加載圖片,當(dāng)然加載什么,用什哪種用戶體驗都得由你決定;

難點:

瀏覽器兼容是造成難點的原因所在,DOM標(biāo)準(zhǔn)和IE標(biāo)準(zhǔn),每天前端的工作都在和它們打交道。思考下面的幾段代碼

1.window.pageYOffset ? window.pageYOffset : window.document.documentElement.scrollTop

目的:獲得當(dāng)前頁面相對于窗口顯示區(qū)左上角的 Y 位置.

DOM標(biāo)準(zhǔn):window.pageYOffset;

IE標(biāo)準(zhǔn):window.document.documentElement.scrollTop

2.window.innerHeight ? window.innerHeight : document.documentElement.clientHeight

目的:聲明了窗口的文檔顯示區(qū)的高度和寬度,以像素計.

DOM標(biāo)準(zhǔn):innerheight 和 innerwidth;

IE標(biāo)準(zhǔn):document.documentElement 或 ducument.body (與 DTD 相關(guān))的 clientWidth 和 clientHeight 屬性作為替代

3.obj.getBoundingClientRect().top + window.document.documentElement.scrollTop + window.document.body.scrollTop

目的:獲取頁面元素的位置.

當(dāng)瀏覽器為 非webkit內(nèi)核 時,document.body.scrollTop值恒定為0,使用 document.documentElement.scrollTop才能取到正確值 ;

當(dāng)瀏覽器為 webkit內(nèi)核 時,document.documentElement.scrollTop值恒定為0,使用 document.body;

我還搜索到一種說法是和DTD相關(guān)(即 當(dāng)頁面指定了 DOCTYPE時,使用 document.documentElement ; 當(dāng)頁面沒有指定了 DOCTYPE時,使用 document.body),請確定知道的朋友幫忙指出下,不勝感謝。

細(xì)節(jié):

1.因為真正的地址最初是在某屬性中(默認(rèn)是xsrc,可自己設(shè)置),所以默認(rèn)的圖片地址***是一個像素的透明圖片,這樣可以避免在瀏覽器中出現(xiàn)紅X;

 

 

2.在圖片load的時候可以加入等待的圖片,這樣用戶才會知道這里有圖片需要加載,良好的用戶體驗是前端一直所追求的(例子中有體現(xiàn));

3.在圖片load成功后可以加入合適的顯示效果(例子中木有體現(xiàn),可以自己嘗試);

JavaScript源碼如下:

  1. var scrollLoad = (function (options) {  
  2.         var defaults = (arguments.length == 0) ? { src: 'xSrc', time: 300} : { src: options.src || 'xSrc', time: options.time ||300};  
  3.         var camelize = function (s) {  
  4.             return s.replace(/-(\w)/g, function (strMatch, p1) {  
  5.                 return p1.toUpperCase();  
  6.             });  
  7.         };  
  8.         this.getStyle = function (element, property) {  
  9.             if (arguments.length != 2) return false;  
  10.             var value = element.style[camelize(property)];  
  11.             if (!value) {  
  12.                 if (document.defaultView && document.defaultView.getComputedStyle) {  
  13.                     var css = document.defaultView.getComputedStyle(element, null);  
  14.                     value = css ? css.getPropertyValue(property) : null;  
  15.                 } else if (element.currentStyle) {  
  16.                     value = element.currentStyle[camelize(property)];  
  17.                 }  
  18.             }  
  19.             return value == 'auto' ? '' : value;  
  20.         };  
  21.         var _init = function () {  
  22.             var offsetPage = window.pageYOffset ? window.pageYOffset : window.document.documentElement.scrollTop,  
  23.                 offsetWindow = offsetPage + Number(window.innerHeight ? window.innerHeight : document.documentElement.clientHeight),  
  24.                 docImg = document.images,  
  25.                 _len = docImg.length;  
  26.             if (!_len) return false;  
  27.             for (var i = 0; i < _len; i++) {  
  28.                 var attrSrc = docImg[i].getAttribute(defaults.src),  
  29.                     o = docImg[i], tag = o.nodeName.toLowerCase();  
  30.                 if (o) {  
  31.                     postPage = o.getBoundingClientRect().top + window.document.documentElement.scrollTop + window.document.body.scrollTop; postWindow = postPage + Number(this.getStyle(o, 'height').replace('px'''));  
  32.                     if ((postPage > offsetPage && postPage < offsetWindow) || (postWindow > offsetPage && postWindow < offsetWindow)) {  
  33.                         if (tag === "img" && attrSrc !== null) {  
  34.                             o.setAttribute("src", attrSrc);  
  35.                         }  
  36.                         o = null;  
  37.                     }  
  38.                 }  
  39.             };  
  40.             window.onscroll = function () {  
  41.                 setTimeout(function () {  
  42.                     _init();  
  43.                 }, defaults.time);  
  44.             }  
  45.         };  
  46.         return _init();  
  47.     });  
  48.     scrollLoad();   

 

***,祝大家工作愉快,學(xué)習(xí)進(jìn)步,哈哈..

demo下載

可傳遞一個參數(shù)設(shè)置src原地址和響應(yīng)時間

原文:http://www.cnblogs.com/Darren_code/archive/2011/07/21/LoadImage.html

【編輯推薦】

  1.  JavaScript入門
  2. JavaScript入門之基本函數(shù)
  3. JavaScript內(nèi)核之基本概念
  4. JavaScript入門之對象與JSON
  5. 10個對JavaScript開發(fā)者超級有用的工具
責(zé)任編輯:陳貽新 來源: 聶微東的博客
相關(guān)推薦

2024-10-10 09:55:51

JavaScript參數(shù)瀏覽器

2009-06-10 21:48:03

滾動圖片Javascript特

2011-03-17 10:37:07

JavaScript

2011-09-02 10:03:40

jQuery滾動圖片

2011-06-27 13:57:42

JavaScript

2009-08-17 10:26:39

鼠標(biāo)手勢

2025-06-18 10:05:26

2013-06-27 11:16:27

Android異步加載

2011-09-02 09:49:29

JQuery圖片滾動

2011-03-14 13:10:43

jQueryscroll滾動

2011-01-17 19:35:04

javascriptjqueryweb

2012-05-07 13:41:18

JavaScript

2012-03-12 09:33:04

JavaScript

2021-06-18 10:12:09

JS代碼前端

2022-01-04 16:50:47

JavaScript圖片網(wǎng)站

2011-07-21 17:35:11

iPhone Table 圖片

2011-07-25 15:32:06

iPhone Table 動態(tài)

2011-09-02 10:14:10

JQuery滾動Xslider

2011-06-27 14:12:30

JavaScript

2010-09-30 15:37:29

ScrollBarJavascrip
點贊
收藏

51CTO技術(shù)棧公眾號