基于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 相关文章推荐
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
解析js原生方法创建表格效率测试
Jul 08 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
Jan 28 Javascript
jQuery实现的倒计时效果实例小结
Apr 16 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
May 25 Javascript
关于网页中的无缝滚动的js代码
Jun 09 Javascript
JavaScript简单下拉菜单特效
Sep 13 Javascript
boostrapTable的refresh和refreshOptions区别浅析
Jan 22 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
Apr 21 Javascript
vue axios请求频繁时取消上一次请求的方法
Nov 10 Javascript
JS函数节流和防抖之间的区分和实现详解
Jan 11 Javascript
layui 数据表格复选框实现单选功能的例子
Sep 19 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
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
详解javascript遍历方式
2015/11/11 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
如何真正的了解python装饰器
2020/08/14 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
Python request post上传文件常见要点
2020/11/20 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
学校领导班子群众路线整改措施
2014/09/16 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
开学第一周值周总结
2015/07/16 职场文书
德能勤绩工作总结
2015/08/11 职场文书
python - asyncio异步编程
2021/04/06 Python
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
html中两种获取标签内的值的方法
2022/06/16 jQuery