利用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快速实现Tab的AJAX动态载入(实例讲解)
Dec 11 Javascript
ie9 提示'console' 未定义问题的解决方法
Mar 20 Javascript
点击button获取text内容并改变样式的js实现
Sep 09 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
Nov 26 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
Apr 13 Javascript
详解在Vue中如何使用axios跨域访问数据
Jul 07 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
Jul 24 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
Sep 18 Javascript
VUE实现图片验证码功能
Nov 18 Javascript
Vue axios获取token临时令牌封装案例
Sep 11 Javascript
typescript编写微信小程序创建项目的方法
Jan 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分页类代码
2013/04/02 PHP
基于php 随机数的深入理解
2013/06/05 PHP
php 实现进制相互转换
2016/04/07 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
Python greenlet实现原理和使用示例
2014/09/24 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
Python tkinter label 更新方法
2018/10/11 Python
python实现矩阵打印
2019/03/02 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
智利最大的网上商店:Linio智利
2016/11/24 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
正规的求职信范文分享
2013/12/11 职场文书
法律专业应届生自荐信范文
2014/01/06 职场文书
校园安全广播稿
2014/02/08 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
大学学雷锋活动总结
2014/06/26 职场文书
学前班学生评语
2014/12/29 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
在CSS中使用when/else的方法
2022/01/18 HTML / CSS