基于jQuery的图片不完全按比例自动缩小


Posted in Javascript onJuly 11, 2014

举例来说

第一种情况:如图片大小为 600×350,显示区域大小为 200×140,如果图片根据目标宽度(200)按比例缩放后大小变成 116,那么显示在 200×140 就会很难看。如下图左

第二种情况:刚好相反,如图片大小为400×400,显示区域同样是200×140,如果图片根据目标高度(140)按比例缩放后大小变成 140,即 140×140,同样难看。如下图右

 基于jQuery的图片不完全按比例自动缩小  基于jQuery的图片不完全按比例自动缩小

这时用 jQuery 获取图片大小再判断处理一下就稍微好点:如第一种情况按140高度算出宽度 140×600/350=240,然后图片按240×140显示,多余部分用 css 的 overflow:hidden 隐藏。

下面是我的处理方法:(注意 - 这里所说的是原图片宽高都大于目标显示框大小的情况下——所以才叫缩小)

Demo 》这里

Html 部分

假如显示区域的 class 为 thumbnail

<div id="content">

 <div class="thumbnail"><img src="" alt="" /></div>

</div>

css 部分

.thumbnail{overflow:hidden;width:200px;height:140px;}

jQuery 部分

1. 当然是先挂 jQuery 库了,怎样挂自行Google、百度
2. 核心代码

jQuery(document).ready(function(){
/* 图片不完全按比例自动缩小 by zwwooooo */
  $(window).load(function(){
	$('#content div.thumbnail img').each(function(){
		var x = 200; //填入目标图片宽度
		var y = 140; //填入目标图片高度
		var w=$(this).width(), h=$(this).height();//获取图片宽度、高度
		if (w > x) { //图片宽度大于目标宽度时
			var w_original=w, h_original=h;
			h = h * (x / w); //根据目标宽度按比例算出高度
			w = x; //宽度等于预定宽度
			if (h < y) { //如果按比例缩小后的高度小于预定高度时
				w = w_original * (y / h_original); //按目标高度重新计算宽度
				h = y; //高度等于预定高度
			}
		}
		$(this).attr({width:w,height:h});
	});
  });
});

适用场所:固定大小的图片显示区域,如缩略图。

折腾完。

下面推荐个内容页面中常用图片大小控制代码:

<script type="text/javascript">
$(window).load(function() {  
  $(".cont img").each( function() {
 var maxwidth = 800;
 if ($(this).width() > maxwidth) {
  $(this).width(maxwidth);
 }
}); 
}); 
</script>

代码不用解释,值得注意的是两个地方:

第一:$(window).load(function() { 

声明事件的部分使用$(window).load,不能使用$(document).ready。
我在百度和iteye网站看到有相关的文章,方法都是错误的。根本不起作用。

第二:$(".cont img").each( function()

这里是.each( function() { ....  }),each在这里是对指定的图片集合对象逐一调用下面的方法。

这种方法兼容大部分的浏览器,效果也很便捷。

个人感觉这种方法比较顺手,另外,可以拓展为缩略图的控制方法。

Javascript 相关文章推荐
jquery、js调用iframe父窗口与子窗口元素的方法整理
Jul 31 Javascript
javascript实现checkBox的全选,反选与赋值
Mar 12 Javascript
利用jQuery中的ajax分页实现代码
Feb 25 Javascript
判断数组是否包含某个元素的js函数实现方法
May 19 Javascript
js简易版购物车功能
Jun 17 Javascript
解决webpack打包速度慢的解决办法汇总
Jul 06 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
JS非空验证及邮箱验证的实例
Aug 11 Javascript
vue中eventbus被多次触发以及踩过的坑
Dec 02 Javascript
angular6的响应式表单的实现
Oct 10 Javascript
vue 属性拦截实现双向绑定的实例代码
Oct 24 Javascript
微信小程序云函数使用mysql数据库过程详解
Aug 07 Javascript
js动态改变select选择变更option的index值示例
Jul 10 #Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
Jul 10 #Javascript
js确认删除对话框适用于a标签及submit
Jul 10 #Javascript
JQuery1.8 判断元素是否绑定事件的方法
Jul 10 #Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
Sep 12 #Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
Jul 09 #Javascript
jQuery获取选中内容及设置元素属性的方法
Jul 09 #Javascript
You might like
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
农历与西历对照
2006/09/06 Javascript
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
javascript实现倒计时关闭广告
2021/02/09 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
使用C#编写创建一个线程的代码
2013/01/22 面试题
乒乓球比赛通知
2015/04/27 职场文书
离职证明格式样本
2015/06/12 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
Echarts如何重新渲染实例详解
2022/05/30 Javascript
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS