需要将图片的地址放到 data-src 属性里,而src值填写默认的一张图片。CSS代码所有具有data-src属性的图片,我们将其初始显示状态为不可见,通过透明度来调节:img { opacity: 1" />
当前位置:首页 > 日记 > 正文

js实现加载淡入淡出效果

js实现加载淡入淡出效果

本文实例为大家分享了js图片加载淡入淡出效果展示的具体代码,供大家参考,具体内容如下

HTML代码

首先是图片标记的写法:

<img data-src="/path/to/image.webp" alt="">

需要将图片的地址放到 data-src 属性里,而src值填写默认的一张图片。

CSS代码

所有具有data-src属性的图片,我们将其初始显示状态为不可见,通过透明度来调节:

img { opacity: 1; transition: opacity 0.3s;}img[data-src] { opacity: 0;}

这样写的作用是什么?等当图片加载时,你就能看的效果了。

JavaScript代码

我们最终会将 data-src 属性去掉,换成src属性,但这是图片加载成功后的动作:

[].forEach.call(document.querySelectorAll('img[data-src]'), function(img) { img.setAttribute('src', img.getAttribute('data-src')); img.onload = function() {  img.removeAttribute('data-src'); };});

相比起其它各种的图片延迟加载技术,这种方法非常的简单,它几乎不要求其它任何条件,可以用在任何地方,使用起来非常灵活。

当然,简单有简单的好坏,也会因为简单而不足。它不具有图片图片滚动到可视窗口内再加载的功能。最终使用哪种技术,还是要看场景而定。

下面是lazyload.js

var lazyLoad = { init: function() {  var that = this;  that.onerrorImgUrl = "data-error"; //图片加载失败用什么图片替换  that.srcStore = "data-src"; //图片真实地址存放的自定义属性  that.class = "lazy-img"; //惰性加载的图片需要添加的class  that.sensitivity = 50; //该值越小,惰性越强(加载越少)  minScroll = 5,  slowScrollTime = 200;  document.addEventListener("scroll", function() {   that.changeimg();  });  setTimeout(function() {   that.trigger();  }, 100); }, scanImage: function() {  var that = this;  var imgList = [];  var allimg = [].slice.call(document.querySelectorAll('img.' + that.class + ''));  allimg.forEach(function(ele) {   if (!that.isLoadedImageCompleted(ele)) {    imgList.push(ele);   }  });  that.imglistArr = imgList; }, isLoadedImageCompleted: function(ele) {  return (ele.getAttribute('data-loaded') == '1') }, trigger: function() {  var that = this;  eventType = that.isPhone && "touchend" || "scroll";  that.fireEvent(document, eventType);  //$(window).trigger(eventType); }, fireEvent: function(element, event) {  // 其他标准浏览器使用dispatchEvent方法  var evt = document.createEvent('HTMLEvents');  // initEvent接受3个参数:  // 事件类型,是否冒泡,是否阻止浏览器的默认行为  evt.initEvent(event, true, true);  return !element.dispatchEvent(evt); }, changeimg: function() {  function loadYesOrno(img) {   var windowPageYOffset = window.pageYOffset,    windowPageYOffsetAddHeight = windowPageYOffset + window.innerHeight,    imgOffsetTop = img.getBoundingClientRect().top + window.pageYOffset;   return imgOffsetTop >= windowPageYOffset && imgOffsetTop - that.sensitivity <= windowPageYOffsetAddHeight;  }  function loadImg(img, index) {   var imgUrl = img.getAttribute(that.srcStore);   img.setAttribute("src", imgUrl);   img.onload || (img.onload = function() {     img.classList.remove(that.class);     img.setAttribute('data-loaded', 1)     img.removeAttribute('data-src');     //$(this).removeClass(that.class).getAttribute('data-loaded',1),     that.imglistArr[index] = null;     img.onerror = img.onload = null;    },    img.onerror = function() {     img.src = img.getAttribute(that.onerrorImgUrl);     img.classList.remove(that.class);     img.classList.add("lazy-err");     img.setAttribute('data-loaded', 0);     //$(this).removeClass(that.class).getAttribute('data-loaded',0),     that.imglistArr[index] = null,      img.onerror = img.onload = null    });   var newImgStack = [];   that.imglistArr.forEach(function(ele) {    //img标签可见并且加载未完成    if (!that.isLoadedImageCompleted(ele)) {     newImgStack.push(ele);    }   });   that.imglistArr = newImgStack;  }  var that = this;  that.scanImage();  that.imglistArr.forEach(function(val, index) {   if (!val) return;   var img = val;   if (!loadYesOrno(img) || that.isLoadedImageCompleted(img)) return;   if (!img.getAttribute(that.srcStore)) return;   loadImg(img, index);  }) }};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

基于ES6 Array.of的用法 | 实例讲

基于ES6 Array.of的用法 | 实例讲

实例,电脑软件,Array,ES6为Array增加了of函数用已一中明确的含义将一个或多个值转换成数组。因为,用new Array()构造数组的时候,是有二意性的。构造时,传一个参数,表示生成多大的数组。构造时,传多个参数,每个参数都是数组的一个元素。const arr1…

BootStrap table删除指定行的注意

BootStrap table删除指定行的注意

删除,注意事项,笔记,电脑软件,BootStrap,这里一定要做一个笔记,这个问题花了好几个小时,问题虽小,但是从中获得一定经验。问题:对于table指定行的数据进行删除,仅仅是前端实现!方法有两种:1、使用官方文档的数据(反正我试了2个小时都不行,如有大神请…

excel插入变成空白怎么办excel插入

excel插入变成空白怎么办excel插入

解决方法,插入图片,空白,电脑软件,excel,  EXCEL具备强大的数据分析工具和数据处理功能,在使用Excel表格时插入图片,发现有空白,这样的表格很不美观。但是又不知道怎么去掉,这该怎么办呢?下面小编来告诉你吧。excel插入图片变成空白的解决方…

jquery 判断是否支持Placeholder属

jquery 判断是否支持Placeholder属

属性,方法,支持,判断是否,电脑软件,实例如下://placeholder兼容性function isPlaceholer(){ var input = document.createElement('input'); return "placeholder" in input;}该函数的结果返回 true or false以上这篇jquery 判断是否支…

word在方框里打勾的三种方法word怎

word在方框里打勾的三种方法word怎

方法,方框,三种,电脑软件,word,  有时我们在Word中制作一份特殊的表格时,可能会用到这样一些特殊符号,&ldquo;在方框里打钩&rdquo;。那么下面就由小编为大家分享下word中在方框里打勾的技巧,希望能帮助您。word在方框里打勾方法一步骤一:打开…

利用ES6的Promise.all实现至少请求

利用ES6的Promise.all实现至少请求

请求,多长时间,实例,电脑软件,Promise,1、背景我们都知道ajax请求可以加个timeout,就是最多请求多少时间,如果超过这个时间直接就报错。 这个是最多请求多长时间,我现在要做的是,最少要请求多长时间,然后才能执行后续的逻辑。比如,一个ajax请求 x…

Excel怎么做减法运算Excel做减法运

Excel怎么做减法运算Excel做减法运

运算,方法,步骤,减法,怎么做,  我们经常使用Excel进行各类运算,可是我们发现软件自身是没有减法运算的函数,那遇到减法运算的时候怎么使用Excel进行运算呢?今天就来跟大家分享Excel做减法运算的方法,希望对你有帮助!Excel做减法运算的步骤打…

ps怎样制作一张透明背景的人物签名

ps怎样制作一张透明背景的人物签名

透明背景,人物,电脑软件,ps,ps怎样制作一张透明背景的人物签名?运用PHOTOSHOP软件,可以很简单的制作大家想要的照片,下面和小编一起来看看具体步骤吧。最终效果具体步骤:第一步把自己的签名拍成照片传到电脑中保存。然后在Photoshop中打开签名…

qq安全中心申请解冻教程

qq安全中心申请解冻教程

安全中心,方法,教程,电脑软件,qq,  当你的Q中病毒后恶意给好友发的垃圾信息,别人会举报你的Q,一旦超过3个举报,TX会把你的Q直接冻结,那么冻结后我们要怎么解冻了?今天小编给你分享一下qq安全中心申请解冻的方法,欢迎阅读。qq安全中心申请解冻…

怎么在ppt中使用公式编辑器ppt中使

怎么在ppt中使用公式编辑器ppt中使

公式编辑器,方法,数学公式,电脑软件,ppt,  使用PPT的一系列操作看起来很简单,真正自己制作起来却经历了不少挑战;公式编辑器都是可以直接在菜单里面调用的。下面小编就教你怎么在ppt中使用公式编辑器。希望对你有帮助!ppt中使用公式编辑器…

wps文字怎么设置页面布局

wps文字怎么设置页面布局

文字,布局,设置,页面布局,方法,  掌握wps文字布局页面的方法,对我们今后处理文档是很有帮助的。对于新手来说还是有一定难度,怎么办?下面就让小编告诉你wps文字如何布局页面,欢迎大家来到学习。wps文字布局页面的方法1、点击WPS文字边上的箭…

Excel2010简单扇形统计图怎么制作

Excel2010简单扇形统计图怎么制作

扇形,简单,统计图,电脑软件,  在统计数据中,扇形统计图主要通过所占扇面的大小,即圆心角的大小,来表示每个数据所占的总体比重,用扇形统计图一目了然。以下是小编为您带来的关于Excel2010简单扇形统计图的制作,希望对您有所帮助。Excel2010简…