利用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 相关文章推荐
JS调用CS里的带参方法实例
Aug 01 Javascript
js的2种继承方式详解
Mar 04 Javascript
js+html5实现canvas绘制椭圆形图案的方法
May 21 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
Dec 21 Javascript
JS实现的数字格式化功能示例
Feb 10 Javascript
浅谈JavaScript正则表达式-非捕获性分组
Mar 08 Javascript
详解angularJs指令的3种绑定策略
Apr 13 Javascript
JavaScript异步上传图片文件的实例代码
Jul 04 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
vue 巧用过渡效果(小结)
Sep 22 Javascript
微信小程序日历/日期选择插件使用方法详解
Dec 28 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
Aug 18 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仿ZOL分页类代码
2008/10/02 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
javascript实现yield的方法
2013/11/06 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
vue cli 全面解析
2018/02/28 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
Python性能提升之延迟初始化
2016/12/04 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
python图书管理系统
2020/04/05 Python
python中的for循环
2018/09/28 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
python框架django项目部署相关知识详解
2019/11/04 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
python实现视频压缩功能
2020/12/18 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
银行实习人员自我鉴定
2013/09/22 职场文书
商场经理竞聘演讲稿
2014/01/01 职场文书
市场部规章制度
2014/01/24 职场文书
毕业自我鉴定书
2014/03/24 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
学校远程教育工作总结
2015/08/11 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL