利用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实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
JS实现的省份级联实例代码
Jun 24 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
Jan 23 Javascript
js实现的tab标签切换效果代码分享
Aug 25 Javascript
3种js实现string的substring方法
Nov 09 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
Nov 29 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
Dec 10 Javascript
jQuery获取Table某列的值(推荐)
Mar 03 Javascript
es6学习笔记之Async函数的使用示例
May 11 Javascript
很棒的vue弹窗组件
May 24 Javascript
React如何利用相对于根目录进行引用组件详解
Oct 09 Javascript
vue.js语法及常用指令
Oct 29 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中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
DOM精简教程
2006/10/03 Javascript
Js中sort()方法的用法
2006/11/04 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
简单了解django orm中介模型
2019/07/30 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
旅游管理本科生求职信
2013/10/14 职场文书
大学生四年生活自我鉴定
2013/11/21 职场文书
英语专业学生个人求职信范文
2014/01/06 职场文书
社团文化节策划书
2014/02/01 职场文书
上班打牌检讨书
2014/02/07 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
学校消防安全责任书
2014/07/23 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
模范教师事迹材料
2014/12/16 职场文书