基于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 性能优化指南(3)
May 21 Javascript
使用JavaScript库还是自己写代码?
Jan 28 Javascript
jquery插件开发方法(初学者)
Feb 03 Javascript
jQuery基于ajax实现星星评论代码
Aug 07 Javascript
javascript实现表单验证
Jan 29 Javascript
jQuery中on方法使用注意事项详解
Feb 15 Javascript
react native仿微信PopupWindow效果的实例代码
Aug 07 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 Javascript
微信小程序实现轮播图效果
Sep 07 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
浅谈对于react-thunk中间件的简单理解
May 01 Javascript
angular4应用中输入的最小值和最大值的方法
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
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
JavaScript中this详解
2015/09/01 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python上下文管理器和with块详解
2017/09/09 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
python之文件读取一行一行的方法
2018/07/12 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
struct与class的区别
2014/02/03 面试题
大学班长的职责
2014/01/27 职场文书
治庸问责心得体会
2014/09/12 职场文书
群众路线表态发言材料
2014/10/17 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
大学生见习总结报告
2015/06/24 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android