当前位置: 首页 > news >正文

可视区域懒加载

在制作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中,移到这里来! } })

转载于:https://www.cnblogs.com/liuna/p/5629483.html

相关文章:

  • 如何自学编程?学习方法在这里!
  • asp.net MD5 加密
  • js base
  • 「译」Node.js Streams 基础
  • SAP到SAP的升级 --- SAP行业新的金矿
  • EZOJ #257
  • iOS开发-开发总结
  • 2019年4月上旬值得一读的10本技术书籍(Python、大数据、深度学习等)!
  • Android Camera(二)
  • 五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O...
  • 04、HttpServletResponse
  • Tomcat7.0源码分析——请求原理分析(中)
  • 小米设备怎么不ROOT激活Xposed框架的步骤
  • Mysql 复制一条数据
  • Netty源码分析(二):服务端启动
  • golang中接口赋值与方法集
  • JavaWeb(学习笔记二)
  • jquery ajax学习笔记
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • mysql_config not found
  • Nacos系列:Nacos的Java SDK使用
  • vagrant 添加本地 box 安装 laravel homestead
  • 大型网站性能监测、分析与优化常见问题QA
  • 爬虫模拟登陆 SegmentFault
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 入手阿里云新服务器的部署NODE
  • 双管齐下,VMware的容器新战略
  • 微服务框架lagom
  • 我是如何设计 Upload 上传组件的
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​学习一下,什么是预包装食品?​
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $.proxy和$.extend
  • (10)STL算法之搜索(二) 二分查找
  • (42)STM32——LCD显示屏实验笔记
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (LeetCode 49)Anagrams
  • (六)Hibernate的二级缓存
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .Net CF下精确的计时器
  • .NET Core 版本不支持的问题
  • .net流程开发平台的一些难点(1)
  • .stream().map与.stream().flatMap的使用
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [4.9福建四校联考]
  • [Android]竖直滑动选择器WheelView的实现
  • [C++]指针与结构体
  • [hibernate]基本值类型映射之日期类型