基于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 相关文章推荐
Jquery 表格合并的问题分享
Sep 17 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
js动态给table添加/删除tr的方法
Aug 02 Javascript
javascript验证只能输入数字和一个小数点示例
Oct 21 Javascript
jQuery中delegate和on的用法与区别详细解析
Jan 26 Javascript
jQuery中extend函数的实现原理详解
Feb 03 Javascript
AngularJS教程 ng-style 指令简单示例
Aug 03 Javascript
js注入 黑客之路必备!
Sep 14 Javascript
基于node.js实现微信支付退款功能
Dec 19 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
Mar 14 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
Aug 06 Javascript
全面解析Vue中的$nextTick
Dec 24 Vue.js
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生成随机数或者字符串的代码
2008/09/05 PHP
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
python利用微信公众号实现报警功能
2018/06/10 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
python opencv调用笔记本摄像头
2019/08/28 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
初中学校军训方案
2014/05/09 职场文书
四年级小学生评语
2014/12/26 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript