基于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 相关文章推荐
IE6与IE7中,innerHTML获取param的区别
Mar 15 Javascript
重写javascript中window.confirm的行为
Oct 21 Javascript
js获取当前页面的url网址信息
Jun 12 Javascript
javascript实现简单的省市区三级联动
May 14 Javascript
jQuery实现带滑动条的菜单效果代码
Aug 26 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
Nov 30 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
jQuery模拟淘宝购物车功能
Feb 27 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
Jun 11 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
Sep 04 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
Jan 29 Javascript
vue 把二维或多维数组转一维数组
Apr 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仿ZOL分页类代码
2008/10/02 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
vue实现分页加载效果
2019/12/24 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
python端口扫描系统实现方法
2014/11/19 Python
python列表操作实例
2015/01/14 Python
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
Python list运算操作代码实例解析
2020/01/20 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
行政部总经理岗位职责
2014/01/04 职场文书
上课玩手机检讨书
2014/02/08 职场文书
入党自荐书范文
2014/03/09 职场文书
大学新学期计划书
2014/04/28 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
javaScript Array api梳理
2021/03/31 Javascript