基于jQuery的图片大小自动适应实现代码

 更新时间:2010年11月17日 14:27:27   作者:  
这个和以前弄的图片远处放大有许多相同的地方,比如图片预加载、有限容器显示无限大图片。
关于
这个和以前弄的图片远处放大有许多相同的地方,比如图片预加载、有限容器显示无限大图片。

大小计算:内外两个比例。
复制代码 代码如下:

// 容器比例和图片比例
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.jb51.net/js/imgAutoResizer/
打包下载:http://xiazai.jb51.net/201011/yuanma/imgAutoResizer.rar

相关文章

  • jQuery 3.0 的变化及使用方法

    jQuery 3.0 的变化及使用方法

    jQuery ,是迄今为止世界上最流行的 JavaScript 库,一直是我们这些 Web 开发者的神器。自从它在 2006 年发布最初版本直到如今,已经有非常多的 Web 开发者在项目中引入了这个优秀的库来使开发工作变得更轻松
    2016-02-02
  • jquery实现简单的全选和反选功能

    jquery实现简单的全选和反选功能

    我们在做项目的时候,经常需要实现全选和反选功能,到网上搜了一圈,发现网上写的全选的代码,不是完整的,是有bug的。下面结合自己的项目给大家分享下。
    2016-01-01
  • jQuery实现径向动画菜单效果

    jQuery实现径向动画菜单效果

    这篇文章主要介绍了jQuery实现径向动画菜单效果的相关资料,需要的朋友可以参考下
    2015-07-07
  • 使用jquery的jsonp如何发起跨域请求及其原理详解

    使用jquery的jsonp如何发起跨域请求及其原理详解

    JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过JavaScript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。下面这篇文章主要给大家介绍了关于使用jquery的jsonp如何发起跨域请求及其原理的相关资料,需要的朋友可以参考下。
    2017-08-08
  • jQuery插件实现手风琴二级菜单

    jQuery插件实现手风琴二级菜单

    这篇文章主要为大家详细介绍了jQuery插件实现手风琴二级菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • JQuery使用数组遍历跳出each循环

    JQuery使用数组遍历跳出each循环

    这篇文章主要介绍了JQuery使用数组遍历跳出each循环,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 利用Jquery实现几款漂亮实用的时间轴(附示例代码)

    利用Jquery实现几款漂亮实用的时间轴(附示例代码)

    这篇文章主要介绍了利用Jquery实现几款漂亮的时间轴示例代码,文中利用Jquery实现了纵向折叠时间轴、纵向鼠标滑动时间轴、纵向可折叠时间轴以及横向时间轴,每种时间轴都给出了完整的示例代码,需要的朋友可以参考学习。
    2017-02-02
  • DWZ table的原生分页浅谈

    DWZ table的原生分页浅谈

    接下来看一段代码,我会给大家详细介绍DWZ中table分页的使用方式,以下是在MVC中实现的方式。
    2013-03-03
  • jquery live()重复绑定的解决方法介绍

    jquery live()重复绑定的解决方法介绍

    本篇文章主要是对jquery中live()重复绑定的解决方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • jQuery 表单验证扩展代码(二)

    jQuery 表单验证扩展代码(二)

    前些天写了一篇文章 jQuery 表单验证扩展(一) ,这是jQuery表单验证扩展的一个雏形,里面有了一些基本的功能!昨晚再次努力了一下,对表单中是否必填项验证这个部分做了一些修改的扩充!
    2010-10-10

最新评论