利用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 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
图像替换新技术 状态域方法
Jan 28 Javascript
JS 类型转换常见方法小结
May 31 Javascript
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
js中复制行和删除行的操作实例
Jun 25 Javascript
深入理解javascript中defer的作用
Dec 11 Javascript
jQuery插件编写步骤详解
Jun 03 Javascript
bootstrapValidator自定验证方法写法
Dec 01 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
Sep 20 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
axios post提交formdata的实例
Mar 16 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模板之Phpbean的目录结构
2008/01/10 PHP
PHP修改session_id示例代码
2014/01/08 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
2014/06/30 PHP
php读取文件内容的方法汇总
2015/01/24 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
joomla组件开发入门教程
2016/05/04 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
python遍历类中所有成员的方法
2015/03/18 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
大学四年规划书范文
2013/12/27 职场文书
司法所长先进事迹
2014/06/02 职场文书
工地宣传标语
2014/06/18 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
投标单位介绍信
2015/05/05 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
高一化学教学反思
2016/02/22 职场文书
交通事故协议书范本
2016/03/19 职场文书
开网店计划分析
2019/07/30 职场文书
Golang二维数组的使用方式
2021/05/28 Golang
浅谈MySQL user权限表
2021/06/18 MySQL
Ruby处理YAML和json数据
2022/04/18 Ruby