成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript實現頁面滾動圖片加載

開發 前端
現在的頁面大多都具有的特點 - 內容豐富,圖片較多;像我們經常瀏覽的淘寶,京東,團購網站之類的,一個頁面幾十張圖片那叫毛毛雨,所以現在流行起了一個方法 -滾動動態加載。

 

為什么寫這篇文章?

1.優化頁面很實用的方法,技術實現不難;

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

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

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

原理:

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

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

3.然后再滾動過程中判斷元素是否進入當前瀏覽器窗口內;

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

難點:

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

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

目的:獲得當前頁面相對于窗口顯示區左上角的 Y 位置.

DOM標準:window.pageYOffset;

IE標準:window.document.documentElement.scrollTop

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

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

DOM標準:innerheight 和 innerwidth;

IE標準:document.documentElement 或 ducument.body (與 DTD 相關)的 clientWidth 和 clientHeight 屬性作為替代

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

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

當瀏覽器為 非webkit內核 時,document.body.scrollTop值恒定為0,使用 document.documentElement.scrollTop才能取到正確值 ;

當瀏覽器為 webkit內核 時,document.documentElement.scrollTop值恒定為0,使用 document.body;

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

細節:

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

 

 

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

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

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();   

 

***,祝大家工作愉快,學習進步,哈哈..

demo下載

可傳遞一個參數設置src原地址和響應時間

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

【編輯推薦】

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

2024-10-10 09:55:51

JavaScript參數瀏覽器

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

鼠標手勢

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圖片網站

2011-07-21 17:35:11

iPhone Table 圖片

2011-07-25 15:32:06

iPhone Table 動態

2011-09-02 10:14:10

JQuery滾動Xslider

2011-06-27 14:12:30

JavaScript

2010-09-30 15:37:29

ScrollBarJavascrip
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97伊人 | 一区二区三区四区不卡视频 | 中文字幕日韩欧美一区二区三区 | 99在线免费观看视频 | 欧美一区二区三区一在线观看 | 日韩视频三区 | 亚洲一视频 | 欧美一区二区三区在线 | 精品日韩一区二区 | av一区二区三区四区 | 欧美日韩国产一区二区三区 | 色综合天天网 | 欧美中文| 久久久久久综合 | 国产成人精品免费视频大全最热 | 99精品国产一区二区三区 | 亚洲视频 欧美视频 | 99在线免费观看视频 | 亚洲午夜精品一区二区三区他趣 | 99精品国产一区二区三区 | 91精品一区二区三区久久久久久 | 国产日韩视频 | 羞羞视频网站免费看 | 免费看91 | 国产精品久久午夜夜伦鲁鲁 | 欧美 日韩 国产 成人 | 在线āv视频 | 污书屋 | 国产精产国品一二三产区视频 | 视频三区| av在线一区二区三区 | 欧美久久久久久久 | 黄色片a级 | 国产成人在线播放 | 欧美久久国产精品 | 久久久久一区二区三区四区 | 午夜一区二区三区 | 久久精品一区 | 国产综合精品一区二区三区 | 91xxx在线观看 | 欧美日韩国产在线 |