ホームページ >ウェブフロントエンド >jsチュートリアル >jQuery スクロール画像の実装principle_jquery
本文主要通过以下几方面来说明懒加载技术的原理,个人前端小菜,有错误请多多指出
一、什么是图片滚动加载?
通俗的讲就是:当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次),只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来。这就是图片懒加载。
二、为什要使用这个技术?
比如一个页面中有很多图片,如淘宝、京东首页等等,如果一上来就发送这么多请求,页面加载就会很漫长,如果js文件都放在了文档的底部,恰巧页面的头部又依赖这个js文件,那就不好办了。更为要命的是:一上来就发送百八十个请求,服务器可能就吃不消了(又不是只有一两个人在访问这个页面)。
因此优点就很明显了:不仅可以减轻服务器的压力,而且可以让加载好的页面更快地呈现在用户面前(用户体验好)。
三、怎么实现?
关键点如下:
1、页面中的img元素,如果没有src属性,浏览器就不会发出请求去下载图片(也就没有请求咯,也就提高性能咯),一旦通过javascript设置了图片路径,浏览器才会送请求。有点按需分配的意思,你不想看,就不给你看,你想看了就给你看~
2、如何获取正真的路径,这个简单,现在正真的路径存在元素的“data-url”(这个名字起个自己认识好记的就行)属性里,要用的时候就取出来,再设置;
3、开始比较之前,先了解一些基本的知识,比如说如何获取某个元素的尺寸大小、滚动条滚动距离及偏移位置距离;
1)屏幕可视窗口大小:对应于图中1、2位置处
原生方法:window.innerHeight 标准浏览器及IE9+ || document.documentElement.clientHeight 标准浏览器及低版本IE标准模式 || document.body.clientHeight 低版本混杂模式
jQuery方法: $(window).height()
2)浏览器窗口顶部与文档顶部之间的距离,也就是滚动条滚动的距离:也就是图中3、4处对应的位置;
原生方法:window.pagYoffset——IE9+及标准浏览器 || document.documentElement.scrollTop 兼容ie低版本的标准模式 || document.body.scrollTop 兼容混杂模式;
jQuery方法:$(document).scrollTop();
3)获取元素的尺寸:对应于图中5、6位置处;左边jquery方法,右边原生方法
$(o).width() = o.style.width;
$(o).innerWidth() = o.style.width+o.style.padding;
$(o).outerWidth() = o.offsetWidth = o.style.width+o.style.padding+o.style.border;
$(o).outerWidth(true) = o.style.width+o.style.padding+o.style.border+o.style.margin;
注意:要使用原生的style.xxx方法获取属性,这个元素必须已经有内嵌的样式,如
;CSS スタイルが元々外部または内部スタイル シートを通じて定義されていた場合は、o.currentStyle[xxx] ||document.defaultView.getComputedStyle(0)[xxx] を使用してスタイル値を取得する必要があります
4) 要素の位置情報を取得します: は、画像
の位置 7 と 8 に対応します。1) ドキュメントの上端と左辺に対する要素の距離を返します。
jQuery: $(o).offset().top 要素とドキュメントの先頭の間の距離、および $(o).offset().left 要素とドキュメントの左端の間の距離
ネイティブ: getoffsetTop()、標高に関する特定の命令があるため、ここでは無視します。
ちなみに、最初に配置された親要素に対する返される要素のオフセット距離は、上記のオフセット距離との違いに注意してください。jQuery:position() はオブジェクトを返します。$(o).position().left = style.left、$(o).position().top = style.top;
4. 要素のサイズとオフセット距離を取得する方法がわかったら、次の質問は、要素が視覚ウィンドウ領域に入ったか、または入ろうとしているかをどのように判断するかということです。以下も問題を説明するための図です。
1) 外側の最大のボックスは実際のページ サイズ、中央の水色のボックスは親要素のサイズを表し、オブジェクト 1 ~ 8 はページ上の要素の実際の位置を表します。水平方向に!
2) このとき、ページの左境界線に対するオブジェクト8の左境界線のオフセット距離(offsetLeft)は、ページの左境界線に対する親要素の右境界線の距離よりも大きくなります。今度は、要素を親要素の外側で読み取ることができます。3) オブジェクト 7 の左境界線が親要素の右境界線と交差しています。このとき、ページの左境界線に対するオブジェクト 7 の左境界線のオフセット距離 (offsetLeft) が距離より小さくなります。ページの左境界線を基準とした親要素の右境界線の位置が変化するため、オブジェクト 7 が親要素の表示領域に入ります。
4) オブジェクト 6 の位置では、オブジェクト 5 の右端とページの左端の間の距離が、親要素の左端とページの左端の間の距離よりも大きくなります。 🎜>5) オブジェクト 5 の位置にあるとき、オブジェクト 5 の右端とページの左端の間の距離は、親要素の左端とページの左端の間の距離よりも小さくなります。このとき、要素は親要素の可視領域外にあると判断できます。
6) したがって、要素が親要素の表示領域内にあることを示すには、水平方向で 2 つの条件が満たされる必要があります。同様に、垂直方向でも 2 つの条件が満たされる必要があります。詳細については以下をご覧ください。
4. jquery プラグインへの展開
使用法: $("selector").scrollLoad({ パラメーターはコードで説明されています })
上記は画像のスクロール読み込みの実装原理を詳しく紹介したもので、皆さんの学習に役立つことを願っています。