js实现图片加载淡入淡出效果
发布时间 - 2026-01-11 00:33:42 点击率:次本文实例为大家分享了js图片加载淡入淡出效果展示的具体代码,供大家参考,具体内容如下

HTML代码
首先是图片标记的写法:
<img data-src="/path/to/image.jpg" 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);
})
}
};
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 图片加载
# 淡入淡出
# 原生js和jquery实现图片轮播淡入淡出效果
# js如何实现淡入淡出效果
# 原生js实现fadein 和 fadeout淡入淡出效果
# js实现图片淡入淡出切换简易效果
# js淡入淡出的图片轮播效果代码分享
# js控制淡入淡出示例代码
# JS实现图片延迟加载并淡入淡出效果的简单方法
# js实现淡入淡出轮播切换功能
# js运动框架_包括图片的淡入淡出效果
# js实现图片淡入淡出效果
# 加载
# 这是
# 也会
# 你就
# 将其
# 要看
# 自定义
# 能看
# 哪种
# 会将
# 大家分享
# 用在
# 它不
# 而定
# 再加
# 具体内容
# 未完成
# 大家多多
# 越小
# 越少
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
jQuery 常见小例汇总
详解Android图表 MPAndroidChart折线图
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
jquery插件bootstrapValidator表单验证详解
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
EditPlus中的正则表达式 实战(1)
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
如何在阿里云高效完成企业建站全流程?
如何在IIS中新建站点并配置端口与物理路径?
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
BootStrap整体框架之基础布局组件
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
实例解析Array和String方法
Laravel如何为API生成Swagger或OpenAPI文档
Laravel如何处理和验证JSON类型的数据库字段
java获取注册ip实例
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
高防服务器:AI智能防御DDoS攻击与数据安全保障
JS经典正则表达式笔试题汇总
微信小程序 canvas开发实例及注意事项
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
如何在企业微信快速生成手机电脑官网?
怎么用AI帮你设计一套个性化的手机App图标?
如何在搬瓦工VPS快速搭建网站?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
5种Android数据存储方式汇总
EditPlus中的正则表达式实战(6)
如何快速生成专业多端适配建站电话?
如何用美橙互联一键搭建多站合一网站?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Python面向对象测试方法_mock解析【教程】
Laravel PHP版本要求一览_Laravel各版本环境要求对照
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Laravel如何实现事件和监听器?(Event & Listener实战)
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
网页设计与网站制作内容,怎样注册网站?
javascript读取文本节点方法小结

