基于jQuery的图片大小自动适应实现代码


Posted in Javascript onNovember 17, 2010

关于
这个和以前弄的图片远处放大有许多相同的地方,比如图片预加载、有限容器显示无限大图片。

大小计算:内外两个比例。

// 容器比例和图片比例 
var dr = dw/dh, ir = iw/ih; 
if(dr>ir){ 
ih = dh; iw = ih * ir; 
}else{ 
iw = dw; ih = iw / ir; 
}

居中显示:CSS绝对定位,负边距。
$img.css({width:iw,height:ih,position:'absolute',top:'50%',left:'50%',marginLeft:-iw/2,marginTop:-ih/2})

加载中和加载出错:可自定义的参数。

HTML容器:
<div class="jq-img-autoresize" data-img-size="160,390" data-img-url="m1.jpg"></div>

如何使用:

$('div.jq-img-autoresize').imgAutoResizer({ 
loading : function () { $(this).text('loading..'); } 
,error : function () { $(this).text('无效..'); } 
});

所有代码:
/* 
* 图片等比缩放 
* @by ambar 
* @create 2010-11-17 
* @update 2010-11-17 
*/ 
$.fn.imgAutoResizer = function (options) { 
return this.each(function () { 
var opt = $.extend({ 
sizeAttr : 'data-img-size' 
,srcAttr : 'data-img-url' 
,error : null 
,loading : null 
}, options || {}); 
var $el = $(this), src = $el.attr(opt.srcAttr), size = $el.attr(opt.sizeAttr).split(','); 
// 容器宽高 
var dw = size[0], dh = size[1]; 
var $img = $('<img />', { src : src }), img = $img[0]; 
var autoresize = function () { 
if($el.data('img.complete')) return; 
// 图片宽高 
var iw = img.width, ih = img.height; 
if(!iw || !ih) return; 
// 比例 
var dr = dw/dh, ir = iw/ih; 
if( !(dw > iw && dh > ih) ){ 
if(dr>ir){ 
ih = dh; iw = ih * ir; 
}else{ 
iw = dw; ih = iw / ir; 
} 
} 
// console.log(dr,':',iw,'@',ih); 
$el.data('img.complete',true).css({position:'relative',width:dw,height:dh,overflow:'hidden'}); 
$img.css({width:iw,height:ih,position:'absolute',top:'50%',left:'50%',marginLeft:-iw/2,marginTop:-ih/2}).appendTo($el.empty()); 
}; 
$img 
.load(autoresize) 
.error(function () { 
if($.isFunction(opt.error)) opt.error.call($el); 
}); 
if(img.complete){ 
if(img.width && img.height) autoresize(); 
}else{ 
if($.isFunction(opt.loading)) opt.loading.call($el); 
} 
}) 
};

演示地址:http://demo.3water.com/js/imgAutoResizer/
打包下载:http://xiazai.3water.com/201011/yuanma/imgAutoResizer.rar
Javascript 相关文章推荐
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
node.js 一个简单的页面输出实现代码
Mar 07 Javascript
js中window.open()的所有参数详细解析
Jan 09 Javascript
document.forms[].submit()使用介绍
Feb 19 Javascript
详谈javascript中DOM的基本属性
Feb 26 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
JS实现超简单的鼠标拖动效果
Nov 02 Javascript
Node.js连接MongoDB数据库产生的问题
Feb 08 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 Javascript
vue.extend与vue.component的区别和联系
Sep 19 Javascript
用vuex写了一个购物车H5页面的示例代码
Dec 04 Javascript
js常用正则表达式集锦
May 17 Javascript
jquery下异步提交表单 异步跨域提交表单
Nov 17 #Javascript
js封装的textarea操作方法集合(兼容很好)
Nov 16 #Javascript
PHP 与 js的通信(via ajax,json)
Nov 16 #Javascript
div层的移动及性能优化
Nov 16 #Javascript
自用js开发框架小成 学习js的朋友可以看看
Nov 16 #Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
Nov 16 #Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 #Javascript
You might like
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
PHP下判断网址是否有效的代码
2011/10/08 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
10款最好的Web开发的 Python 框架
2015/03/18 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
应届大学生求职信
2013/12/01 职场文书
汇源肾宝广告词
2014/03/20 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
详解Python描述符的工作原理
2021/06/11 Python