jQuery 等比例缩放大图片实例代码

我们分两种情况来讲述:

1.已知图片尺寸

 代码如下 复制代码

<div id="demo1"> 
    <img src="a.jpg" width="800" height="300" alt=""> 
</div> 

当页面加载的图片<img>中含有属性width和height值,则可以使用几句简单的jQuery代码实现等比例缩放。

 代码如下 复制代码

$(function(){ 
    var w = $("#demo1").width();//容器宽度 
    $("#demo1 img").each(function(){//如果有很多图片,我们可以使用each()遍历 
        var img_w = $(this).width();//图片宽度 
        var img_h = $(this).height();//图片高度 
        if(img_w>w){//如果图片宽度超出容器宽度--要撑破了 
            var height = (w*img_h)/img_w; //高度等比缩放 
            $(this).css({"width":w,"height":height});//设置缩放后的宽度和高度 
        } 
    }); 
}); 

2.未知图片尺寸

当页面加载的图片尺寸未知的情况下,上述代码则不能进行有效的缩放,这种情况多出现在采集的外部链接图片。

 代码如下 复制代码

<div id="demo2"> 
    <img src=https://yunqi-tech.oss-cn-hangzhou.aliyuncs.com/63826f14jw1e1w67g8tdfj.jpg alt=""> 
</div> 

这样的话我们jquery无法实现了,下面一个朋友写了一个不错的解决求知图片等比例缩放效果

通过imgReady可以跨浏览器在dom ready就可以实现图片自适应,无需等待img加载,代码如下:
(3-17修复网友crossyou 指出的一处错误,并且新版本去掉了替换图片)

 代码如下 复制代码

(function ($) {
  // 检测是否支持css2.1 max-width属性
 var isMaxWidth = 'maxWidth' in document.documentElement.style,
  // 检测是否IE7浏览器
  isIE7 = !-[1,] && !('prototype' in Image) && isMaxWidth;
 
 $.fn.autoIMG = function () {
  var maxWidth = this.width();
  
  return this.find('img').each(function (i, img) {
   // 如果支持max-width属性则使用此,否则使用下面方式
   if (isMaxWidth) return img.style.maxWidth = maxWidth + 'px';
   var src = img.src;
   
   // 隐藏原图
   img.style.display = 'none';
   img.removeAttribute('src');
   
   // 获取图片头尺寸数据后立即调整图片
   imgReady(src, function (width, height) {
    // 等比例缩小
    if (width > maxWidth) {
     height = maxWidth / width * height,
     width = maxWidth;
     img.style.width = width + 'px';
     img.style.height = height + 'px';
    };
    // 显示原图
    img.style.display = '';
    img.setAttribute('src', src);
   });
   
  });
 };
 
 // IE7缩放图片会失真,采用私有属性通过三次插值解决
 isIE7 && (function (c,d,s) {s=d.createElement('style');d.getElementsByTagName('head')[0].appendChild(s);s.styleSheet&&(s.styleSheet.cssText+=c)||s.appendChild(d.createTextNode(c))})('img {-ms-interpolation-mode:bicubic}',document);

 /**
  * 图片头数据加载就绪事件

  * @param {String} 图片路径
  * @param {Function} 尺寸就绪 (参数1接收width; 参数2接收height)
  * @param {Function} 加载完毕 (可选. 参数1接收width; 参数2接收height)
  * @param {Function} 加载错误 (可选)
  */
 var imgReady = (function () {
  var list = [], intervalId = null,

  // 用来执行队列
  tick = function () {
   var i = 0;
   for (; i < list.length; i++) {
    list[i].end ? list.splice(i--, 1) : list[i]();
   };
   !list.length && stop();
  },

  // 停止所有定时器队列
  stop = function () {
   clearInterval(intervalId);
   intervalId = null;
  };

  return function (url, ready, load, error) {
   var check, width, height, newWidth, newHeight,
    img = new Image();
   
   img.src = url;

   // 如果图片被缓存,则直接返回缓存数据
   if (img.complete) {
    ready(img.width, img.height);
    load && load(img.width, img.height);
    return;
   };
   
   // 检测图片大小的改变
   width = img.width;
   height = img.height;
   check = function () {
    newWidth = img.width;
    newHeight = img.height;
    if (newWidth !== width || newHeight !== height ||
     // 如果图片已经在其他地方加载可使用面积检测
     newWidth * newHeight > 1024
    ) {
     ready(newWidth, newHeight);
     check.end = true;
    };
   };
   check();
   
   // 加载错误后的事件
   img.onerror = function () {
    error && error();
    check.end = true;
    img = img.onload = img.onerror = null;
   };
   
   // 完全加载完毕的事件
   img.onload = function () {
    load && load(img.width, img.height);
    !check.end && check();
    // IE gif动画会循环执行onload,置空onload即可
    img = img.onload = img.onerror = null;
   };

   // 加入队列中定期执行
   if (!check.end) {
    list.push(check);
    // 无论何时只允许出现一个定时器,减少浏览器性能损耗
    if (intervalId === null) intervalId = setInterval(tick, 40);
   };
  };
 })();

})(jQuery);

调用方法

 代码如下 复制代码

调用演示:$(‘#demo p’).autoIMG()

时间: 2024-09-12 03:04:17

jQuery 等比例缩放大图片实例代码的相关文章

jQuery等比例缩放大图片(jQuery.autoIMG.min.js)

介绍下autoIMG. autoIMG可以快速对文章图片进行尺寸自适应,它利用浏览器获取图片文件头尺寸数据,无需等待图片加载完成. autoIMG兼容:Chrome | Firefox | Sifari | Opera | IE6 | IE7 | IE8 | ... 调用autoIMG插件方法相当简单:    代码如下 复制代码 $(function(){     $("#demo2").autoIMG(); }); 下面看个实例  代码如下 复制代码 <script type=

jQuery实现等比例缩放大图片让大图片自适应页面布局_jquery

在布局页面时,有时会遇到大图片将页面容器"撑破"的情况,尤其是加载外链图片(通常是通过采集的外站的图片).那么本文将为您讲述使用jQuery如何按比例缩放大图片,让大图片自适应页面布局. 通常我们处理缩略图是使用后台代码(PHP..net.Java等)根据大图片生成一定尺寸的缩略图,来供前台页面调用,当然也有使用前台javascript脚本将加载后的大图强行缩放,变成所谓的缩略图,这种方法不可取.但是,针对网站内容页,如本站文章详情页,如果需要加载一张很大的图片时,为了防止"

php gd等比例缩放压缩图片函数_php技巧

本文实例为大家分享了php gd等比例缩放压缩图片函数,供大家参考,具体内容如下 <?php /** * desription 判断是否gif动画 * @param sting $image_file图片路径 * @return boolean t 是 f 否 */ function check_gifcartoon($image_file){ $fp = fopen($image_file,'rb'); $image_head = fread($fp,1024); fclose($fp); r

jQuery+css实现的切换图片功能代码_jquery

本文实例讲述了jQuery+css实现的切换图片功能代码.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html> <html> <head> <title>demo</title> <script type="text/javascript" src="jquery.js"></script> <style type="t

基于jQuery实现仿51job城市选择功能实例代码_jquery

前些文章用写过,省市县三级联动,但是感觉选择的时候不够直观,现在改进了下,效果如下图 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="City.aspx.cs" Inherits="System_Select_City" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition

jquery 弹出层ajax登陆实例代码

jquery 弹出层ajax登陆实例代码 jQuery(document).ready(function(){  jQuery('.login_show').click(function(){   var xmlhttp=createxmlhttp();   if(!xmlhttp)   {    alert("你的浏览器不支持XMLHTTP!!");    return;   }   var  Digital=new  Date();   Digital=Digital+40000;

通过jquery实现页面的动画效果(实例代码)_jquery

有很多函数可以用来实现动画效果,其中animate函数为最为常见的函数之一.以下为对该函数使用方式的简要介绍. animate函数基本形式 通过animate实现动画效果的基本形式为: $(selector).animate({params},speed,callback); 其中{params}为必须项,它是一个对象,指明了我们希望指定元素通过动画效果运行后,其所具有的的CSS样式,speed和callback则皆为可选项,其中speed指明了动画运行的速度,其值可为数值类型(如1000表示动

Android 手势 正则匹配图片实例代码

为没有手势的控件(ViewFlipper) 添加手势 xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools

基于jQuery仿淘宝产品图片放大镜代码分享_jquery

这篇文章主要介绍了jQuery淘宝产品图片放大镜特效,鼠标点击图片,图片放大,特别适合图片细节展示,感兴趣的小伙伴可以参考下.(1)html代码: <div class="box"> <div class="tb-booth tb-pic tb-s310"> <a href="images/01.jpg"> <img src="images/01_mid.jpg" alt="