js 一个关于图片onload加载的事


Posted in Javascript onNovember 10, 2013

 首先先明确一下我要的目的:

当用户进入页面的时候,显示loading 加载图标,等最大的图片加载之后再opacity 图片;

功能很简单,但是很蛋疼的是,我没完全做出来;

在做的时候,第一时间我自然想到了如下的方法:

$(function(){
    $('.banner img').load(function(){
        console.log('已经加载')    
    });
});

熟话说的好呀,自信心太膨胀,到头来打击很大了;我以为这样就可以了,然后看了一遍之后拿给老大,老大点了两下,说一直不加载出来了,loading 转转转的就是出不来,我说不应该呀,然后自己试一下,果真如此。

接着找了一下资料,发现上面说是缓存的原因,因为load加载的时候有限浏览器会因为缓存不会触发load事件;没果;我就发了一个狠招:

window.onload=function(){
    console.log('已经加载')};

嘿嘿,这样还不行,我顶你个肺了;然后自信心又彭脏了,拿给老大,老大说行,第二天,客户来电说页面不加载,一个loading一直转转转的;我无语的回答他说:应该是你们那网速太慢了。。。你在等等,过了一下他答:说这样不行,虽然出来了,但等太久了;能不能让时间稍微少一点;

无奈,我就只能各种压缩图片呀,压完之后,他还是觉得不太理想;老大说这样可以了,现在项目还只是扔在空间上,这空间本来很慢,如果他网速慢,加载的时间自然也慢了。

老大说是这样说呀,任务还是没完成啊,绞尽脑汁,偶然看到一个外国网站的轮播图jq 插件,我下下来看了一下源码,接着就诞生出了以下招数:

var oImg = $('.banner img:eq(0)');
    oImg.attr('src')+'?'+(new Date()).getTime();
    oImg.load(function(){
        console.log('已经加载')    
    });

经过测试很正常,这个意思就是,在进入页面的时候,把图片的地址加一个时间,这样每次加载的时候就不会有缓存;而且也只是加载一张图,一张加载完之后其他就不管;

经过改正,也没跟老大说就传了上去;这次我也不敢大意,就一直在测,这一测就测出不是问题的问题了;

因为页面加载的时候图片路径每次都会不同,所以每次都会去加载,消耗的时间跟第一次加载等同;那不就是说进入一次就要加载一次吗?

我晕.........

经过数十次的尝试,苦逼的我,终于找到了一个完败上面所有方法的办法 了:

function imgloading(){
    console.log('已经加载')
}
//页面调用
<img src="1.jpg" onload="imgloading();"/>

这样就可以解决掉图片缓存了,还是会触发load事件;虽然我还不是具体理解这个;不过听别人说,这还是因为页面加载的原因;

众所周知网页是从上往下加载的;当加载到img的时候,我在ready里面获取img 元素其实是取不到的;当页面继续往下加载,经过img之后,当前的img就代表加载完毕了,既然加载完毕,我想都加载了,介个load还有用吗?

而上述的方法不难看出,页面仔加载到img 的时候碰到了onload方法,它就知道了这个图片必须要加载之后才出现。

好了。。。不知道有没有同行遇到了本苦逼这样的事情,是否找到了比这个更加完美的解决方案。。如果你有更完美的办法,请一定要留言告知呀,万分感谢,我总感觉还是有更加好的方法的。。。

Javascript 相关文章推荐
Javascript代码在页面加载时的执行顺序介绍
May 03 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
Feb 28 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
JS动态添加iframe的代码
Sep 14 Javascript
jQuery实现简易的天天爱消除小游戏
Oct 16 Javascript
jQuery实现简单的图片查看器
Sep 11 Javascript
JS+Canvas绘制时钟效果
Aug 20 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
Dec 27 Javascript
VUE JS 使用组件实现双向绑定的示例代码
Jan 10 Javascript
关于vue-router的beforeEach无限循环的问题解决
Sep 09 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
详解ES6中class的实现原理
Oct 03 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
Nov 10 #Javascript
全面理解面向对象的 JavaScript(来自ibm)
Nov 10 #Javascript
面向对象设计模式的核心法则
Nov 10 #Javascript
JavaScript 语言基础知识点总结(思维导图)
Nov 10 #Javascript
JS增加行复制行删除行的实现代码
Nov 09 #Javascript
javascript相等运算符与等同运算符详细介绍
Nov 09 #Javascript
js实现简单登录功能的实例代码
Nov 09 #Javascript
You might like
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python脚本实时处理log文件的方法
2016/11/21 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
pytorch实现线性拟合方式
2020/01/15 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
软件测试面试题
2014/01/05 面试题
《九寨沟》教学反思
2014/04/08 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
机械专业技术员求职信
2014/06/14 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
生日寿星公答谢词
2015/09/29 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
vue实现Toast组件轻提示
2022/04/10 Vue.js
redis protocol通信协议及使用详解
2022/07/15 Redis