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 相关文章推荐
$()JS小技巧
Jul 21 Javascript
jquery实现侧边弹出的垂直导航
Dec 09 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
May 06 Javascript
JQuery球队选择实例
May 18 Javascript
jquery实现倒计时功能
Dec 28 Javascript
详解 vue.js用法和特性
Oct 15 Javascript
JavaScript常见JSON操作实例分析
Aug 08 Javascript
vue弹窗插件实战代码
Sep 08 Javascript
vue计算属性computed的使用方法示例
Mar 13 Javascript
微信小程序整合使用富文本编辑器的方法详解
Apr 25 Javascript
vue-test-utils初使用详解
May 23 Javascript
jQuery带控制按钮轮播图插件
Jul 31 jQuery
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
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
php htmlspecialchars加强版
2010/02/16 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
JavaScript Eval 函数使用
2010/03/23 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
详解VUE 数组更新
2017/12/16 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
python实现Virginia无密钥解密
2019/03/20 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
python怎么自定义捕获错误
2020/06/29 Python
python Timer 类使用介绍
2020/12/28 Python
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
法律六进活动方案
2014/03/13 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
刑事代理授权委托书
2014/09/17 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
安全保证书
2015/01/16 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS