利用javascript解决图片缩放及其优化的代码


Posted in Javascript onMay 23, 2012

一个客户跟我联系说,刚给他做的网站,显示不正常,我顿时一紧张,这是我独立完成的第一个项目,于是赶紧打开他的网站看了看,没看出什么不正常来。我又问他怎么不正常,他说和交接项目时的效果不一样,晕,交接时要是不正常,项目肯定交接不了啊,干脆让他截个图过来。果然不正常,是他刚上传的一张图片把显示内容的窗口撑开了。查看代码,明明写好了max-width,怎么还会出现这种情况。突然发现他发来的图上,那个浏览器看着不顺眼,像是古老的而神圣的IE6!经过确认,果然是它,又是它!我真是疏忽,没给他在IE6下测试就交工了。

说起IE6,真是让我们这些做前端的人又恨又无奈,许多属性都不支持。可不少用户还在用它,我们也不能无视。为了兼容,我只好跟同事请教了一下,然后针对IE6用js缩放来显示图片并进行了一些细节上的优化。

尽管今天的这个客户网站比较小,对网站性能的要求也不高,但考虑以后可能还会用到这些东西,做优化是个长期学习的过程,我查阅了一些文章,说是如果利用img标签的onload方法来调用函数进行尺寸的修改,对性能的影响比较大,另外,利用 -expression 行为似乎也不可取(以后继续求证吧),所以,最后是采用页面加载时触发。

function resizeImage(img,width){ 
var image=new Image(); 
image.src=img.src; 
var temp = image.width; 
img.width = temp = (temp>width)?width:temp; 
img.style.display = "inline"; 
} 
function doResize(){ 
if($.browser.version==6&&$.browser.msie) $("img").each(function(){resizeImage(this,100)}); 
} 
window.onload = doResize;

这段代码利用resizeImage函数判断,并且修改img.width属性,原理比较简单,在这段代码前面我还加了一个对IE6浏览器的判定,除了它以外,我还是让CSS搞定图片的尺寸。我在代码中没有定义图片的高和宽的数值,这样在缩放时,只要修改其中的一个数值,让另一个数值去自适应,而不是让js去执行等比缩放,这也算是一点点优化吧。我在代码中引用了Jquery(因为习惯了),你没必要这样做,我之所以这么写,是在DOM元素返回以后可以统一进行函数处理。考虑到客户经常会使用外链的图片,这时,网页的显示速度就受到图片源的影响,所以在页面加载时我先利用CSS把需要显示的图片隐藏,直到图片缩放后再利用js的方法显示图片,因此,又对IE6做了个hack:
img{ 
display:inline !important; 
display:none; 
max-width:180px; 
}
Javascript 相关文章推荐
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
Jan 11 Javascript
JQuery操作元素的css样式
Mar 09 Javascript
Jquery使用val方法读写value值
May 18 Javascript
微信小程序 绘图之饼图实现
Oct 24 Javascript
基于vue实现多引擎搜索及关键字提示
Mar 16 Javascript
使用node.js搭建服务器
May 20 Javascript
Vue2.0 从零开始_环境搭建操作步骤
Jun 14 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
Oct 20 Javascript
JS获取数组中出现次数最多及第二多元素的方法
Oct 27 Javascript
推荐10款扩展Web表单的JS插件
Dec 25 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 Javascript
如何用JavaScipt测网速
May 09 Javascript
JavaScript 图像动画的小demo
May 23 #Javascript
JavaScript学习笔记记录我的旅程
May 23 #Javascript
JS中处理与当前时间间隔的函数代码
May 23 #Javascript
自己做的模拟模态对话框实现代码
May 23 #Javascript
解决jquery的datepicker的本地化以及Today问题
May 23 #Javascript
{}与function(){}选用空对象{}来存放keyValue
May 23 #Javascript
JavaScript基本编码模式小结
May 23 #Javascript
You might like
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php&mysql 日期操作小记
2012/02/27 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
轻松实现php文件上传功能
2017/02/17 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
angularjs基础教程
2014/12/25 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Python实例一个类背后发生了什么
2016/02/09 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
详解关于Django中ORM数据库迁移的配置
2018/10/08 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
英国精品买手店:Browns Fashion
2016/09/29 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
银行贷款承诺书
2014/03/29 职场文书
团支部建设方案
2014/05/02 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
导游词之安徽巢湖
2019/12/26 职场文书