JavaScript和jQuery懒加载之可视区域加载

2024-08-27 13:18

本文主要是介绍JavaScript和jQuery懒加载之可视区域加载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JavaScript懒加载之可视区域加载

在制作js可视区域加载之前,我们首先必须了解各种高度,我之前的一篇文章JavaScript的height总结,大家可以看一下,复习一下!

了解了各种高度之后,我们开始我们的js代码吧!

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>haorooms前端博客-可视区域加载之 javascript</title><style>img{width:100%;margin-bottom: 30px; min-height: 400px; background-color: #ddd;}</style>
</head>
<body>
<img haoroomslazyload="Chrysanthemum.jpg" src="" >
<img haoroomslazyload="Desert.jpg" src="" >
<img haoroomslazyload="Hydrangeas.jpg" src="" >
<img haoroomslazyload="Koala.jpg" src="" >
<img haoroomslazyload="Lighthouse.jpg" src="" >
<img haoroomslazyload="Penguins.jpg" src="" >
<img haoroomslazyload="Tulips.jpg" src="" >
<script>var imgNum=document.getElementsByTagName('img').length;var imgObj=document.getElementsByTagName("img");var l=0;window.onscroll=function(){var seeHeight = document.documentElement.clientHeight;var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;for(var i=l;i<imgNum;i++){if(imgObj[i].offsetTop < seeHeight + scrollTop){console.log(imgObj[i].getAttribute("src"));console.log(imgObj[i].src );if(imgObj[i].getAttribute("src") == ""){imgObj[i].src = imgObj[i].getAttribute("haoroomslazyload");}}if(imgObj[i].offsetTop > seeHeight + scrollTop){l=i;break;}}}</script>

大家注意看我的两个console输出,console.log(imgObj[i].src );获取的是整个浏览器地址!

jquery懒加载之可视区域加载

上面的js用jquery翻译版!

var l=0
//js方法翻译版
$(window).bind("scroll", function(event){for(var i=l;i<$("img").length;i++){if($("img").eq(i).offset().top < parseInt($(window).height()) + parseInt($(window).scrollTop())){if($("img").eq(i).attr("src") == ""){var lazyloadsrc=$('img').eq(i).attr("haoroomslazyload");$("img").eq(i).attr("src",lazyloadsrc);}}if($("img").eq(i).offset().top  > parseInt($(window).height()) + parseInt($(window).scrollTop())){l=i;break;}}});

另外一种方法,可以参考我之前写的一个延迟加载的插件:http://www.haorooms.com/post/touchweb_canvas_lazyload

其中是这么写的。

我把这个写法拎了出来,如下:

$(window).bind("scroll", function(event){$("img").each(function(){//窗口的高度+看不见的顶部的高度=屏幕低部距离最顶部的高度  
        var thisButtomTop = parseInt($(window).height()) + parseInt($(window).scrollTop());var thisTop = parseInt($(window).scrollTop()); //屏幕顶部距离最顶部的高度  
        var PictureTop = parseInt($(this).offset().top);if (PictureTop >= thisTop && PictureTop <= thisButtomTop && $(this).attr("haoroomslazyload") != $(this).attr("src")) {$(this).attr("src", $(this).attr("haoroomslazyload"));}});})

可视区域加载延伸

例如一个动画效果,或者一个canvas图片,我想达到的效果是,初始进来不加载,当滚动到这个动画或者图表上面的时候,进行加载,那么我们就可以根据上面的代码进行如下改进:

$(window).bind("scroll", function(event){//窗口的高度+看不见的顶部的高度=屏幕低部距离最顶部的高度  
    var thisButtomTop = parseInt($(window).height()) + parseInt($(window).scrollTop());var thisTop = parseInt($(window).scrollTop()); //屏幕顶部距离最顶部的高度  
    var PictureTop = parseInt($("你的要滚动加载的ID").offset().top);if (PictureTop >= thisTop && PictureTop <= thisButtomTop) {//  $("#你的要滚动加载的ID").attr("src", $("#你的要滚动加载的ID").attr("haoroomslazyload")); 

        //此处可以执行你的加载函数,加载函数由原来的document.ready中,移到这里来!
        
    }
})
原文地址:http://www.haorooms.com/post/js_jquery_lazyload_viewload

这篇关于JavaScript和jQuery懒加载之可视区域加载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111776

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法