찾다
웹 프론트엔드JS 튜토리얼자바스크립트 지연 로딩 기술(lazyload)_javascript 기술의 간단한 구현

1. 서문
지연 로딩 기술(Lazyload라고도 함)은 js 프로그래머가 웹 페이지 성능을 최적화하기 위한 솔루션입니다. 지연 로드의 핵심은 대규모 로딩에서 찾을 수 있습니다. 예를 들어 Google의 이미지 검색 페이지, Thunder 홈페이지, Taobao, QQ space 등이 있습니다. 따라서 지연 로드 기술을 익히는 것이 좋습니다. 불행하게도 jquery 플러그인 지연 로드 공식 웹사이트(http://www.appelsiini. net/projects/lazyload)에서는 새 버전의 브라우저를 지원하지 않는다고 합니다.

2. 어떤 상황에 레이지로드가 더 적합합니까?
대역폭을 많이 차지하는 사진, 플래시 리소스, iframe, 웹 페이지 편집기(FCK와 유사) 등이 포함됩니다. 모듈은 당분간 브라우저에서 사용할 수 없습니다. 적절한 시간에 이러한 유형의 리소스를 로드하기 위해 지연 로드를 사용할 수 있습니다.

3. Layload 구현 방법
Lazyload의 어려움 사용자가 필요한 리소스를 적절한 시점에 로드하는 방법(여기서 사용자가 필요로 하는 리소스는 브라우저의 가시 영역에 표시되는 리소스를 의미함) ). 따라서 대상이 클라이언트 영역에 표시되었는지 확인하려면 다음을 포함하여 여러 가지 정보를 알아야 합니다:
 1. 브라우저 상단을 기준으로 한 시각적 영역의 위치
2. 위치
위의 두 가지 데이터 지점을 얻은 후 다음 함수를 사용하여 개체가 브라우저의 표시 영역에 있는지 확인할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

// 브라우저의 가시 영역 위치를 반환합니다.
function getClient() {
var l,t,w,h;
l = document.documentElement.scrollLeft || document.body.scrollLeft;
t = document.documentElement.scrollTop || 🎜> w = document.documentElement.clientWidth; .documentElement.clientHeight;
Return {'left':l,'top':t,'width':w,'height':h}
; 🎜> //로드할 리소스 위치로 복귀
function getSubClient(p){
var l = 0,t = 0,w,h
w = p.offsetWidth; > h = p.offsetHeight;
while(p.offsetParent ){
 l = p.offsetLeft;
 t = p.offsetTop;
  p = p.offsetParent; 'height':h } ;
}


  getClient() 함수는 브라우저 클라이언트 영역 영역 정보를 반환하고, getSubClient() 함수는 대상 모듈 영역 정보를 반환합니다. 이때 대상 모듈이 클라이언트 영역에 나타나는지 여부를 판단하는 것은 실제로 위의 두 직사각형이 교차하는지 여부를 판단하는 것입니다. 코드는 다음과 같습니다.


// 두 직사각형이 교차하는지 확인하고 부울 값을 반환합니다.
function intens(rec1,rec2){
var lc1,lc2,tc1,tc2, w1,h1> lc1 = rec1.left rec1.width / 2;
lc2 = rec2.left rec2.width / 2
tc1 = rec1.top rec1.height / 2; = rec2.top rec2 .height / 2;
  w1 = (rec1.width rec2.width) / 2   h1 = (rec1.height rec2.height) / 2; return Math.abs( lc1 - lc2) < ; w1 && Math.abs(tc1 - tc2)   } 이제 기본적으로 창에 일부를 작성할 수 있습니다. onscroll 이벤트


코드를 복사합니다


코드는 다음과 같습니다. 🎜>

 

 

 

  var d1 = document.getElementById("d1");
Window.onscroll = function(){
  var prec1 = getClient(); var prec2 = getSubClient(d1);
if(intens(prec1,prec2)){
Alert("true")
}
팝업 창에 필요한 리소스만 로드하면 됩니다.
여기서 주목해야 할 점은 대상 개체가 클라이언트 영역에 표시되면 팝업 창이 다음과 같이 계속해서 팝업된다는 점입니다. 따라서 먼저 팝업을 띄워야 합니다. 창 이후 이 영역의 모니터링을 취소하려면 여기서 배열을 사용하여 모니터링해야 할 개체를 수집합니다. 또한 onscroll 이벤트와 onresize 이벤트는 브라우저의 가시 영역 정보를 변경하므로 이러한 유형의 이벤트가 트리거된 후 대상 개체가 가시 영역에 있는지 다시 계산해야 합니다. () 함수는 이를 달성하기 위해 사용됩니다.(Thunder 홈페이지의 Lazyload 대상 객체가 브라우저의 가시 영역에 있는지 여부는 onresize 이벤트에서 다시 계산되지 않습니다. 따라서 먼저 브라우저 창을 특정 크기로 줄이면 , 이미지를 로드해야 하는 영역으로 스크롤한 다음 최대화를 클릭하면 이미지가 로드되지 않습니다. 하하, 나중에 필요합니다.

요소 추가:

코드 복사 코드는 다음과 같습니다.

// 브라우저 영역에 특정 하위 영역이 있는지 비교
function jiance(arr,prec1,callback){
var prec2;
for(var i = arr.length - 1 ; i >= 0 ;i--){
if(arr[i]) {
  prec2 = getSubClient(arr[i] );
if(intens(prec1,prec2)){
콜백(arr[i]);
모니터링 삭제
    delete arr[i] = getClient(); arr,prec1,function(obj){
    //리소스 로드...
   Alert(obj.innerHTML)
  })
 }
//하위 영역 1
  var d1 = document.getElementById("d1");
//하위 영역 2개
var d2 = document.getElementById("d2")
//눌러야 함 영역 컬렉션을 로드해야 함
var arr = [d1,d2];
window.onscroll = function(){
// 다시 계산
autocheck();
}
window.onresize = function(){
   / / Recalculate
  autocheck();

이제 팝업 창에 필요한 리소스만 로드하면 됩니다. 필요하신 분이나 질문이 있으신 분은 저에게 연락주세요.
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Linux 动态链接与静态链接原来是这么回事?Linux 动态链接与静态链接原来是这么回事?Feb 05, 2024 pm 05:45 PM

老规矩,先提出几个问题:为什么要进行动态链接?如何进行动态链接?什么是地址无关代码技术?什么是延迟绑定技术?如何在程序运行过程中进行显式链接?为什么要进行动态链接?动态链接的出现是为了解决静态链接的一些缺点:节约内存和磁盘空间:如下图所示,Program1和Program2分别包含Program1.o和Program2.o两个模块,他们都需要Lib.o模块。静态链接情况下,两个目标文件都用到Lib.o这个模块,所以它们同时在链接输出的可执行文件Program1和program2中有副本,同时运行

Java JPA 性能优化秘籍:让你的应用程序飞起来Java JPA 性能优化秘籍:让你的应用程序飞起来Feb 19, 2024 pm 09:03 PM

文章关键字:JavaJPA性能优化ORM实体管理JavaJPA(JavaPersistanceapi)是一种对象关系映射(ORM)框架,它允许你使用Java对象来操作数据库中的数据。JPA提供了与数据库交互的统一API,使得你可以使用同样的代码访问不同数据库。此外,JPA还支持懒加载、缓存和脏数据检测等特性,可以提高应用程序的性能。然而,如果使用不当,JPA性能可能会成为你应用程序的瓶颈。以下是一些常见的性能问题:N+1查询问题:当你在应用程序中使用JPQL查询时,可能遇到N+1查询问题。在这种

如何阻止iframe加载事件如何阻止iframe加载事件Feb 19, 2024 am 08:02 AM

如何防止iframe加载事件在网页开发中,我们常常会使用iframe标签来嵌入其他网页或内容。默认情况下,当浏览器加载iframe时,会触发加载事件。然而,在某些情况下,我们可能希望延迟加载iframe,或者完全阻止加载事件。在本文中,我们将探讨如何通过代码示例来实现这个目标。一、延迟加载iframe如果要延迟加载iframe,我们可以使用

Java JPA 开源项目推荐:为你的项目注入新的活力Java JPA 开源项目推荐:为你的项目注入新的活力Feb 20, 2024 am 09:09 AM

在Java编程领域,JPA(JavaPersistenceapi)作为一种流行的持久化框架,为开发者提供了对关系型数据库进行操作的便捷方式。通过使用JPA,开发者可以轻松地将Java对象持久化到数据库中,并从数据库中检索数据,从而极大地提高了应用程序的开发效率和维护性。本文精心挑选了10个高质量的JavaJPA开源项目,涵盖了各种不同的功能和应用场景,旨在为开发者提供更多的灵感和解决方案,助力打造更高效和可靠的应用程序。这些项目包括:SpringDataJPA:springDataJPA是Spr

使用C# Lazy 实现延迟加载的方法使用C# Lazy 实现延迟加载的方法Feb 19, 2024 am 09:42 AM

C#如何使用Lazy实现懒加载,需要具体代码示例在软件开发中,懒加载(Lazyloading)是一种延迟加载的技术,它可以帮助我们提高程序的性能和资源利用效率。在C#中,我们可以使用Lazy类来实现懒加载的功能。本文将介绍Lazy类的基本概念以及如何使用它来实现懒加载,同时会提供具体的代码示例。首先,我们需要了解Lazy

PHP7中的生成器:如何高效地处理大量数据和延迟加载?PHP7中的生成器:如何高效地处理大量数据和延迟加载?Oct 27, 2023 pm 07:31 PM

PHP7中引入了生成器(Generator)这一概念,它提供了一种高效地处理大量数据和延迟加载的方法。本文将从概念和原理入手,结合具体代码示例,介绍PHP7中生成器的使用方法和优势。生成器是一种特殊的函数,它不是一次性地将所有数据返回,而是按需生成数据。当函数执行到yield语句时,会将当前生成的值返回,并且函数的状态会被保存。下一次调用生成器函数时,函数会

懒加载延迟加载什么意思懒加载延迟加载什么意思Nov 20, 2023 pm 02:12 PM

懒加载是一种程序设计模式,指的是在需要时才加载数据,而不是在对象初始化或加载时就立即获取数据的策略,懒加载的目的是为了延迟数据的加载,以节省系统资源和提高性能。

提升网站速度的关键优化模式,每个前端开发者都必须掌握!提升网站速度的关键优化模式,每个前端开发者都必须掌握!Feb 02, 2024 pm 05:36 PM

前端开发者必备:掌握这些优化模式,让网站飞起来!随着互联网的快速发展,网站已经成为企业宣传和交流的重要渠道之一。一个性能优良、加载迅速的网站不仅可以提升用户体验,还可以吸引更多的访问者。作为一名前端开发者,掌握一些优化模式是必不可少的。本文将介绍一些常用的前端优化技术,帮助开发者更好地优化网站。压缩文件在网站开发中,经常使用的文件类型包括HTML、CSS和J

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)