javascript 动态调整图片尺寸实现代码


Posted in Javascript onDecember 28, 2009

我前段时间写的一篇文章就遇到过这种事情,后来用CSS的overflow和max-width属性暂时解决了页面变形的问题。这种方法好处是简单,但坏处是会破坏某些细节的效果。

如overflow:hidden,意思是当内部元素宽度大于父框架时隐藏超出宽度的部分。这样做可能会是一些内容突然截断,被隐藏了,很对不起观众。

通过max-width属性限制文章插图最大宽度的话,需要考虑各浏览器的兼容性。IE6是不支持这个属性的,在我印象中,一些浏览器虽然支持这个属性,但图片不是等比缩放的(好像是Safari和Opera,记不清了),这样做的话对这些浏览器的用户很不公平。

因此,我最终选择的是通过JavaScript动态改变图片尺寸。这种方法对各种浏览器兼容性良好(现在应该很少人会禁用JavaScript吧?),如果换主题的话,也可以灵活地改变文章插图的最大尺寸。

方案有两个,由于我使用的主题是加载了jQuery库的,因此可以用以下代码实现:

$(document).ready(function() { 
$('.post img').each(function() { 
var maxWidth = 100; // 图片最大宽度 
var maxHeight = 100; // 图片最大高度 
var ratio = 0; // 缩放比例 
var width = $(this).width(); // 图片实际宽度 
var height = $(this).height(); // 图片实际高度 
// 检查图片是否超宽 
if(width > maxWidth){ 
ratio = maxWidth / width; // 计算缩放比例 
$(this).css("width", maxWidth); // 设定实际显示宽度 
height = height * ratio; // 计算等比例缩放后的高度 
$(this).css("height", height * ratio); // 设定等比例缩放后的高度 
} 
// 检查图片是否超高 
if(height > maxHeight){ 
ratio = maxHeight / height; // 计算缩放比例 
$(this).css("height", maxHeight); // 设定实际显示高度 
width = width * ratio; // 计算等比例缩放后的高度 
$(this).css("width", width * ratio); // 设定等比例缩放后的高度 
} 
}); 
});

如果不想加载jQuery库,可以用以下代码:
function ResizeImage(image, 插图最大宽度, 插图最大高度) 
{ 
if (image.className == "Thumbnail") 
{ 
w = image.width; 
h = image.height; 
if( w == 0 || h == 0 ) 
{ 
image.width = maxwidth; 
image.height = maxheight; 
} 
else if (w > h) 
{ 
if (w > maxwidth) image.width = maxwidth; 
} 
else 
{ 
if (h > maxheight) image.height = maxheight; 
} 
image.className = "ScaledThumbnail"; 
} 
}

采用纯JavaScript的话,麻烦点,需要手动为图片加上class=”Thumbnail”,但最终效果是一样的。
Javascript 相关文章推荐
htm调用JS代码
Mar 15 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
May 25 Javascript
jquery中animate动画积累的解决方法
Oct 05 Javascript
js使用setTimeout实现定时炸弹的方法
Apr 10 Javascript
JavaScript 详解预编译原理
Jan 22 Javascript
一个可复用的vue分页组件
May 15 Javascript
详解angular 中的自定义指令之详解API
Jun 20 Javascript
vue实现点击图片放大效果
Aug 15 Javascript
Vue2.0子同级组件之间数据交互方法
Feb 28 Javascript
不得不知的ES6小技巧
Jul 28 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
小程序跳转H5页面的方法步骤
Mar 06 Javascript
jquery $(document).ready() 与window.onload的区别
Dec 28 #Javascript
jQuery的强大选择器小结
Dec 27 #Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
Dec 27 #Javascript
JavaScript 拾漏补遗
Dec 27 #Javascript
js 实现无干扰阴影效果 简单好用(附文件下载)
Dec 27 #Javascript
向大师们学习Javascript(视频与PPT)
Dec 27 #Javascript
javascript+css 网页每次加载不同样式的实现方法
Dec 27 #Javascript
You might like
基于mysql的论坛(3)
2006/10/09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
javascript求日期差的方法
2016/03/02 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
2016/10/13 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[05:24]TI9采访——教练
2019/08/24 DOTA
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
python制作mysql数据迁移脚本
2019/01/01 Python
python如何建立全零数组
2020/07/19 Python
医院护理人员的自我评价分享
2013/10/04 职场文书
药品采购员岗位职责
2014/02/08 职场文书
检举信的格式及范文
2014/04/04 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
小学教师师德承诺书
2014/05/23 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书