利用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简单实现元素复制示例附图
Nov 19 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
Javascript Memoizer浅析
Oct 16 Javascript
总结JavaScript三种数据存储方式之间的区别
May 03 Javascript
jQuery获取与设置iframe高度的方法
Aug 01 Javascript
AngularJS中比较两个数组是否相同
Aug 24 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
Sep 08 Javascript
React Native之TextInput组件解析示例
Aug 22 Javascript
JS获取字符对应的ASCII码实例
Sep 10 Javascript
vue中配置mint-ui报css错误问题的解决方法
Oct 11 Javascript
原生js实现随机点名功能
Nov 05 Javascript
vue 如何使用递归组件
Oct 23 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把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
使用python开发vim插件及心得分享
2014/11/04 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
对Python3 序列解包详解
2019/02/16 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
django model object序列化实例
2020/03/13 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
ktv收银员岗位职责
2013/12/16 职场文书
旷课检讨书3000字
2014/02/04 职场文书
餐饮投资计划书
2014/04/25 职场文书
促销活动总结报告
2014/04/26 职场文书
三好学生事迹材料
2014/12/24 职场文书
公司给客户的感谢信
2015/01/23 职场文书
演讲比赛主持词
2015/06/29 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL
python内置模块之上下文管理contextlib
2022/06/14 Python