基于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 相关文章推荐
js图片轮播手动切换效果
Nov 10 Javascript
浅谈js的异步执行
Oct 18 Javascript
AngularJS入门教程之模块化操作用法示例
Nov 02 Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 Javascript
js 倒计时(高效率服务器时间同步)
Sep 12 Javascript
jQuery实现的表格前端排序功能示例
Sep 18 jQuery
Vue实现PopupWindow组件详解
Apr 28 Javascript
微信小程序将字符串生成二维码图片的操作方法
Jul 17 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
Dec 10 Javascript
js实现json数组分组合并操作示例
Feb 12 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
Apr 20 Javascript
js基于div丝滑实现贝塞尔曲线
Sep 23 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
使用adodb lite解决问题
2006/12/31 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
Yii2单元测试用法示例
2016/11/12 PHP
javascript模拟枚举的简单实例
2014/03/06 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
在Python中使用第三方模块的教程
2015/04/27 Python
使用Python写CUDA程序的方法
2017/03/27 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
致铅球运动员广播稿精选
2014/01/12 职场文书
班级活动策划书
2014/02/06 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
工伤赔偿协议书
2014/04/15 职场文书
初中生评语大全
2014/04/24 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
2014年实习生工作总结
2014/11/27 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
优质护理服务心得体会
2016/01/22 职场文书
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
MySQL插入数据与查询数据
2022/03/25 MySQL