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

jquery图片懒加载

HTML、 

 <div><img class="lazyload" alt="" width="1000"  data-original="/skin/default/images/BB2.jpg" src="默认图片地址"/><img class="lazyload" alt="" width="1000"  data-original="/skin/default/images/BB2.jpg"  src="默认图片地址"/><img class="lazyload" alt="" width="1000"  data-original="/skin/default/images/BB2.jpg"  src="默认图片地址"/><img class="lazyload" alt="" width="1000"  data-original="/skin/default/images/BB2.jpg"  src="默认图片地址"/><img class="lazyload" alt="" width="1000"  data-original="/skin/default/images/BB2.jpg"  src="默认图片地址"/><img class="lazyload" alt="" width="1000"  data-original="/skin/default/images/BB2.jpg"  src="默认图片地址"/></div>

lazyload.js

/*!* An jQuery | zepto plugin for lazy loading images.* author -> jieyou* see https://github.com/jieyou/lazyload* use some tuupola's code https://github.com/tuupola/jquery_lazyload (BSD)* use component's throttle https://github.com/component/throttle (MIT)*/
;(function(factory){if(typeof define === 'function' && define.amd){ // AMD// you may need to change `define([------>'jquery'<------], factory)` // if you use zepto, change it rely name, such as `define(['zepto'], factory)`define(['jquery'], factory)// define(['zepto'], factory)}else{ // Globalfactory(window.jQuery || window.Zepto)}
})(function($,undefined){var w = window,$window = $(w),defaultOptions = {threshold                   : 0,failure_limit               : 0,event                       : 'scroll',effect                      : 'show',effect_params               : null,container                   : w,data_attribute              : 'original',data_srcset_attribute       : 'original-srcset',skip_invisible              : true,appear                      : emptyFn,load                        : emptyFn,vertical_only               : false,check_appear_throttle_time  : 300,url_rewriter_fn             : emptyFn,no_fake_img_loader          : false,placeholder_data_img        : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC',// for IE6\7 that does not support data imageplaceholder_real_img        : 'http://ditu.baidu.cn/yyfm/lazyload/0.0.1/img/placeholder.png'// todo : 灏嗘煇浜涘睘鎬х敤global鏉ラ厤缃紝鑰屼笉鏄瘡娆″湪$(selector).lazyload({})鍐呴厤缃�},type // functionfunction emptyFn(){}type = (function(){var object_prototype_toString = Object.prototype.toStringreturn function(obj){// todo: compare the speeds of replace string twice or replace a regExpreturn object_prototype_toString.call(obj).replace('[object ','').replace(']','')}})()function belowthefold($element, options){var foldif(options._$container == $window){fold = ('innerHeight' in w ? w.innerHeight : $window.height()) + $window.scrollTop()}else{fold = options._$container.offset().top + options._$container.height()}return fold <= $element.offset().top - options.threshold}function rightoffold($element, options){var foldif(options._$container == $window){// Zepto do not support `$window.scrollLeft()` yet.fold = $window.width() + ($.fn.scrollLeft?$window.scrollLeft():w.pageXOffset)}else{fold = options._$container.offset().left + options._$container.width()}return fold <= $element.offset().left - options.threshold}function abovethetop($element, options){var foldif(options._$container == $window){fold = $window.scrollTop()}else{fold = options._$container.offset().top}// console.log('abovethetop fold '+ fold)// console.log('abovethetop $element.height() '+ $element.height())return fold >= $element.offset().top + options.threshold  + $element.height()}function leftofbegin($element, options){var foldif(options._$container == $window){// Zepto do not support `$window.scrollLeft()` yet.fold = $.fn.scrollLeft?$window.scrollLeft():w.pageXOffset}else{fold = options._$container.offset().left}return fold >= $element.offset().left + options.threshold + $element.width()}function checkAppear($elements, options){var counter = 0$elements.each(function(i,e){var $element = $elements.eq(i)if(($element.width() <= 0 && $element.height() <= 0) || $element.css('display') === 'none'){return}function appear(){$element.trigger('_lazyload_appear')// if we found an image we'll load, reset the counter counter = 0}// If vertical_only is set to true, only check the vertical to decide appear or not// In most situations, page can only scroll vertically, set vertical_only to true will improve performanceif(options.vertical_only){if(abovethetop($element, options)){// Nothing. }else if(!belowthefold($element, options)){appear()}else{if(++counter > options.failure_limit){return false}}}else{if(abovethetop($element, options) || leftofbegin($element, options)){// Nothing. }else if(!belowthefold($element, options) && !rightoffold($element, options)){appear()}else{if(++counter > options.failure_limit){return false}}}})}// Remove image from array so it is not looped next time. function getUnloadElements($elements){return $elements.filter(function(i,e){return !$elements.eq(i)._lazyload_loadStarted})}// throttle : https://github.com/component/throttle , MIT Licensefunction throttle (func, wait) {var ctx, args, rtn, timeoutID // cachingvar last = 0return function throttled () {ctx = thisargs = argumentsvar delta = new Date() - lastif (!timeoutID)if (delta >= wait) call()else timeoutID = setTimeout(call, wait - delta)return rtn}function call () {timeoutID = 0last = +new Date()rtn = func.apply(ctx, args)ctx = nullargs = null}}if(!$.fn.hasOwnProperty('lazyload')){$.fn.lazyload = function(options){var $elements = this,isScrollEvent,isScrollTypeEvent,throttleCheckAppearif(!$.isPlainObject(options)){options = {}}$.each(defaultOptions,function(k,v){if($.inArray(k,['threshold','failure_limit','check_appear_throttle_time']) != -1){ // these params can be a stringif(type(options[k]) == 'String'){options[k] = parseInt(options[k],10)}else{options[k] = v}}else if(k == 'container'){ // options.container can be a seletor string \ dom \ jQuery objectif(options.hasOwnProperty(k)){   if(options[k] == w || options[k] == document){options._$container = $window}else{options._$container = $(options[k])}}else{options._$container = $window}delete options.container}else if(defaultOptions.hasOwnProperty(k) && (!options.hasOwnProperty(k) || (type(options[k]) != type(defaultOptions[k])))){options[k] = v}})isScrollEvent = options.event == 'scroll'throttleCheckAppear = options.check_appear_throttle_time == 0?checkAppear:throttle(checkAppear,options.check_appear_throttle_time)// isScrollTypeEvent cantains custom scrollEvent . Such as 'scrollstart' & 'scrollstop'// https://github.com/search?utf8=%E2%9C%93&q=scrollstartisScrollTypeEvent = isScrollEvent || options.event == 'scrollstart' || options.event == 'scrollstop'$elements.each(function(i,e){var element = this,$element = $elements.eq(i),placeholderSrc = $element.attr('src'),originalSrcInAttr = $element.attr('data-'+options.data_attribute), // `data-original` attribute valueoriginalSrc = options.url_rewriter_fn == emptyFn?originalSrcInAttr:options.url_rewriter_fn.call(element,$element,originalSrcInAttr),originalSrcset = $element.attr('data-'+options.data_srcset_attribute),isImg = $element.is('img')if($element._lazyload_loadStarted == true || placeholderSrc == originalSrc){$element._lazyload_loadStarted = true$elements = getUnloadElements($elements)return}$element._lazyload_loadStarted = false// If element is an img and no src attribute given, use placeholder. if(isImg && !placeholderSrc){// For browsers that do not support data image.$element.one('error',function(){ // `on` -> `one` : IE6 triggered twice error event sometimes$element.attr('src',options.placeholder_real_img)}).attr('src',options.placeholder_data_img)}// When appear is triggered load original image. $element.one('_lazyload_appear',function(){var effectParamsIsArray = $.isArray(options.effect_params),effectIsNotImmediacyShowfunction loadFunc(){// In most situations, the effect is immediacy show, at this time there is no need to hide element first// Hide this element may cause css reflow, call it as less as possibleif(effectIsNotImmediacyShow){// todo: opacity:0 for fadeIn effect$element.hide()}if(isImg){// attr srcset firstif(originalSrcset){$element.attr('srcset', originalSrcset)}if(originalSrc){$element.attr('src', originalSrc)}}else{$element.css('background-image','url("' + originalSrc + '")')}if(effectIsNotImmediacyShow){$element[options.effect].apply($element,effectParamsIsArray?options.effect_params:[])}$elements = getUnloadElements($elements)}if(!$element._lazyload_loadStarted){effectIsNotImmediacyShow = (options.effect != 'show' && $.fn[options.effect] && (!options.effect_params || (effectParamsIsArray && options.effect_params.length == 0)))if(options.appear != emptyFn){options.appear.call(element, $element, $elements.length, options)}$element._lazyload_loadStarted = trueif(options.no_fake_img_loader || originalSrcset){if(options.load != emptyFn){$element.one('load',function(){options.load.call(element, $element, $elements.length, options)})}loadFunc()}else{$('<img />').one('load', function(){ // `on` -> `one` : IE6 triggered twice load event sometimesloadFunc()if(options.load != emptyFn){options.load.call(element, $element, $elements.length, options)}}).attr('src',originalSrc)}}})// When wanted event is triggered load original image // by triggering appear.                              if (!isScrollTypeEvent){$element.on(options.event, function(){if (!$element._lazyload_loadStarted){$element.trigger('_lazyload_appear')}})}})// Fire one scroll event per scroll. Not one scroll event per image. if(isScrollTypeEvent){options._$container.on(options.event, function(){throttleCheckAppear($elements, options)})}// Check if something appears when window is resized. // Force initial check if images should appear when window is onload. $window.on('resize load', function(){throttleCheckAppear($elements, options)})// Force initial check if images should appear. $(function(){throttleCheckAppear($elements, options)})return this}}
})

 js

<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="lazyload.js"></script>
<script type="text/javascript">
$(function() {$("img.lazyload").lazyload();
});
</script>

相关文章:

jquery图片懒加载

HTML、 <div><img class"lazyload" alt"" width"1000" data-original"/skin/default/images/BB2.jpg" src"默认图片地址"/><img class"lazyload" alt"" width"1000" data-…...

【端口】-

端口总体上分为硬件端口和软件端口 硬件端口&#xff1a;路由器或者交换机上的硬件端口&#xff0c;硬件端口是不同硬件设备进行交互的接口 软件端口&#xff1a;应用层的各种协议进程与运输实体进行层间交互的一种地址...

【研发日记】Matlab/Simulink技能解锁(十一)——Stateflow中的en、du、ex应用对比

文章目录 前言 项目背景 en类型 du类型 ex类型 组合类型 分析和应用 总结 参考资料 前言 见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构》 见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》 见《【研发日记】Matlab/Simul…...

《学会 SpringMVC 系列 · 剖析篇(上)》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

【Vulnhub系列】Vulnhub_SecureCode1靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_SecureCode1靶场渗透 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、环境配置 1、从百度网盘下载对应靶机的.ova镜像 2、在VM中选择【打开】该.ova 3、选择存储路径&#xff0…...

【C语言】结构体详解 -《探索C语言的 “小宇宙” 》

目录 C语言结构体&#xff08;struct&#xff09;详解结构体概览表1. 结构体的基本概念1.1 结构体定义1.2 结构体变量声明 2. 结构体成员的访问2.1 使用点运算符&#xff08;.&#xff09;访问成员输出 2.2 使用箭头运算符&#xff08;->&#xff09;访问成员输出 3. 结构体…...

基于DTW距离的KNN算法实现股票高相似筛选案例

使用DTW算法简单实现曲线的相似度计算-CSDN博客 前文中股票高相关k线筛选问题的延伸。基于github上的代码迁移应用到股票高相关预测上。 这里给出一个相关完整的代码实现案例。 1、数据准备 假设你已经有了一些历史股票的k线数据。如果数据能打标哪些股票趋势是上涨的、下跌…...

GD32 - IIC程序编写

一、初始化 理论知识链接&#xff1a; IIC理论知识 二、代码实现 1、SDA和SCL设置成开漏输出模式 开漏输出的作用&#xff1a; 因为IIC总线是一种双向的通信协议&#xff0c;需要使用开漏输出实现共享总线。开漏输出类似于一种线与的方式&#xff0c;即无论总线上哪个设备…...

将项目部署到docker容器上

通过docker部署前后端项目 前置条件 需要在docker中拉去jdk镜像、nginx镜像 docker pull openjdk:17 #拉取openjdk17镜像 docker pull nginx #拉取nginx镜像部署后端 1.打包后端项目 点击maven插件下面的Lifecycle的package 对后端项目进行打包 等待打包完成即可 2.将打…...

免费【2024】springboot宠物美容机构CRM系统设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…...

搞懂数据结构与Java实现

文章链接&#xff1a;搞懂数据结构与Java实现 (qq.com) 代码链接&#xff1a; Java实现数组模拟循环队列代码 (qq.com) Java实现数组模拟栈代码 (qq.com) Java实现链表代码 (qq.com) Java实现哈希表代码 (qq.com) Java实现二叉树代码 (qq.com) Java实现图代码 (qq.com)...

Stable Diffusion 图生图

区别于文生图&#xff0c;所谓的图生图&#xff0c;俗称的垫图&#xff0c;就是比文生图多了一张参考图&#xff0c;由参考一张图来生成图片&#xff0c;影响这个图片的要素不仅只靠提示词了&#xff0c;还有这个垫图的因素&#xff0c;这个区域就上上传垫图的地方&#xff0c;…...

语言转文字

因为工作原因需要将语音转化为文字&#xff0c;经常搜索终于找到一个免费的好用工具&#xff0c;记录下使用方法 安装Whisper 搜索Colaboratory 右上方链接服务 执行 !pip install githttps://github.com/openai/whisper.git !sudo apt update && sudo apt install f…...

ref函数

Vue2 中的ref 首先我们回顾一下 Vue2 中的 ref。 ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通的 DOM 元素上使用&#xff0c;引用指向的就是 DOM 元素&#xff1b;如果用在子组件上&#xff0c;引用就指向组件实例&#xff1…...

7/30 bom和dom

文档对象mox 浏览器对象模型...

【Golang 面试 - 进阶题】每日 3 题(五)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

MySQL,GROUP BY子句的作用是什么?having和where的区别在哪里说一下jdbc的流程

GROUP BY 子句的作用是什么 GROUP BY 字段名 将数据按字段值相同的划为一组&#xff0c;经常配合聚合函数一起使用。 having和where的区别在哪里 where是第一次检索数据时候添加过滤条件&#xff0c;确定结果集。而having是在分组之后添加结果集&#xff0c;用于分组之后的过…...

1._专题1_双指针_C++

双指针 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff0c;一种是左右指针。对撞指针&#xff1a;一般用于顺序结构中&#xff0c;也称左右指针。 对撞指针从两端向中间移动。一个指针从最左端开始&#xff0c;另一个从最右端开始&#xff0c;然后逐渐往中间逼近…...

Spring集成ES

RestAPI ES官方提供的java语言客户端用以组装DSL语句,再通过http请求发送给ES RestClient初始化 引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </d…...

力扣高频SQL 50题(基础版)第二十六题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第二十六题1667.修复表中的名字题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第二十六题 1667.修复表中的名字 题目说明 表&#xff1a; Users ----------------…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...