基于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 一道字符串分解的题目
Aug 03 Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
简单讲解jQuery中的子元素过滤选择器
Apr 18 Javascript
vue.js从安装到搭建过程详解
Mar 17 Javascript
JS利用cookies设置每隔24小时弹出框
Apr 20 Javascript
vue移动端实现下拉刷新
Apr 22 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
Oct 12 Javascript
Next.js项目实战踩坑指南(笔记)
Nov 29 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
Dec 13 Javascript
webpack4 SplitChunks实现代码分隔详解
May 23 Javascript
JS实现随机抽选获奖者
Nov 07 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
Apr 27 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
zf框架的registry(注册表)使用示例
2014/03/13 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
Underscore源码分析
2015/12/30 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
送你43道JS面试题(收藏)
2019/06/17 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
vue自定义树状结构图的实现方法
2020/10/18 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
python获取android设备的GPS信息脚本分享
2015/03/06 Python
python实现文本文件合并
2015/12/29 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
详解Python实现进度条的4种方式
2020/01/15 Python
通俗讲解python 装饰器
2020/09/07 Python
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
什么是数组名
2012/05/10 面试题
2014年元旦感言
2014/03/06 职场文书
职业规划实施方案
2014/06/10 职场文书
环保口号大全
2014/06/12 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书