利用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移除button的inline onclick事件(已测试及兼容浏览器)
Jan 25 Javascript
jquery 表格的增行删行实现思路
Mar 21 Javascript
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
js中this的用法实例分析
Jan 10 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
Jun 19 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
Dec 22 Javascript
基于javascript实现图片懒加载
Jan 05 Javascript
JS实现的幻灯片切换显示效果
Sep 07 Javascript
浅谈Node.js:Buffer模块
Dec 05 Javascript
JS对象是否拥有某属性如何判断
Feb 03 Javascript
bootstrap select下拉搜索插件使用方法详解
Nov 23 Javascript
angularjs请求数据的方法示例
Aug 06 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
PHP开发负载均衡指南
2010/07/17 PHP
php使用curl访问https示例分享
2014/01/17 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
python对html代码进行escape编码的方法
2015/05/04 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
Python多线程扫描端口代码示例
2018/02/09 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
浅析python参数的知识点
2018/12/10 Python
Django用户认证系统 User对象解析
2019/08/02 Python
python 一维二维插值实例
2020/04/22 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
合作意向书范本
2014/03/31 职场文书
党员演讲稿
2014/09/04 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
2014年党委工作总结
2014/11/22 职场文书
事业单位考察材料范文
2014/12/25 职场文书
试用期转正工作总结2015
2015/05/28 职场文书
校运会加油稿大全
2015/07/22 职场文书
Python音乐爬虫完美绕过反爬
2021/08/30 Python
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle
Linux中sftp常用命令整理
2022/06/28 Servers