基于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淡入淡出效果的实现思路
Mar 31 Javascript
Knockout text绑定DOM的使用方法
Nov 15 Javascript
jQuery中bind与live的用法及区别小结
Jan 27 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
Apr 17 Javascript
js在IE与firefox的差异集锦
Nov 11 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
Sep 22 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
Jan 27 Javascript
JS判断用户用的哪个浏览器实例详解
Oct 09 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
Sep 23 Javascript
JavaScript 替换所有匹配内容及正则替换方法
Feb 12 Javascript
JavaScript中while循环的基础使用教程
Aug 11 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及Zend Engine的线程安全模型分析
2011/11/10 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
详解php的socket通信
2015/08/11 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
淘宝搜索框效果实现分析
2011/03/05 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
python difflib模块示例讲解
2017/09/13 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
python 列表推导式使用详解
2019/08/29 Python
django中media媒体路径设置的步骤
2019/11/15 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
python 实现目录复制的三种小结
2019/12/04 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
ktv筹备计划书
2014/05/03 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers