基于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下利用fso判断文件是否存在的代码
Dec 11 Javascript
5个最佳的Javascript日期处理类库分享
Apr 15 Javascript
js转html实体的方法
Sep 27 Javascript
详解Angular.js的$q.defer()服务异步处理
Nov 06 Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
vue.js移动数组位置,同时更新视图的方法
Mar 08 Javascript
在Angular中使用JWT认证方法示例
Sep 10 Javascript
JS前端广告拦截实现原理解析
Feb 17 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
微信小程序转化为uni-app项目的方法示例
May 22 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
Aug 18 Javascript
vue 实现图片懒加载功能
Dec 31 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
基于mysql的bbs设计(五)
2006/10/09 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
2019/03/11 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
微信小程序实现的五星评价功能示例
2019/04/25 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
python实现京东秒杀功能
2018/07/30 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
计算机应用毕业生自荐信
2013/10/23 职场文书
《画》教学反思
2014/04/14 职场文书
社区先进事迹材料
2014/05/19 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
会议欢迎词范文
2015/01/27 职场文书
七一建党节慰问信
2015/02/14 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书