利用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弹出层的显示与隐藏示例代码
Dec 27 Javascript
js基于cookie记录来宾姓名的方法
Jul 19 Javascript
概述jQuery中的ajax方法
Dec 16 Javascript
JS实现旋转木马式图片轮播效果
Jan 18 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
Aug 14 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
vue如何根据网站路由判断页面主题色详解
Nov 02 Javascript
iview实现select tree树形下拉框的示例代码
Dec 21 Javascript
通过cordova将vue项目打包为webapp的方法
Feb 02 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 30 Javascript
原生js实现简单轮播图
Oct 26 Javascript
原生JavaScript实现随机点名表
Jan 14 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字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
vue强制刷新组件的方法示例
2019/02/28 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
Python开发编码规范
2006/09/08 Python
python实现的防DDoS脚本
2011/02/08 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
python3+PyQt5实现柱状图
2018/04/24 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
python重要函数eval多种用法解析
2020/01/14 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
python 决策树算法的实现
2020/10/09 Python
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
模具设计与制造专业应届生求职信
2013/10/18 职场文书
高三自我鉴定怎么写
2013/10/19 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
男方婚礼答谢词
2015/01/20 职场文书
同意转租证明
2015/06/24 职场文书
事业单位岗位说明书
2015/10/08 职场文书
2016年父亲节寄语
2015/12/04 职场文书
Python中的 enumerate和zip详情
2022/05/30 Python
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript