利用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 相关文章推荐
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
jquery中获得元素尺寸和坐标的方法整理
May 18 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
Jun 04 Javascript
js实现Select列表各项上移和下移的方法
Aug 14 Javascript
jQuery ajax应用总结
Jun 02 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
关于vuex的学习实践笔记
Apr 05 Javascript
JavaScript实现的拼图算法分析
Feb 13 Javascript
JS实现给数组对象排序的方法分析
Jun 24 Javascript
jquery插件实现轮播图效果
Oct 19 jQuery
JavaScript实现鼠标经过表格某行时此行变色
Nov 20 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
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
JS前端加密算法示例
2016/12/22 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
让 python 命令行也可以自动补全
2014/11/30 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
心理健康教育心得体会
2013/12/29 职场文书
医务人员自我评价
2014/01/26 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
团代会闭幕词
2015/01/28 职场文书
导游词之山东孔庙
2019/11/04 职场文书
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android