【问题标题】:How do I get actual image width and height using jQuery?如何使用 jQuery 获取实际的图像宽度和高度?
【发布时间】:2010-03-07 10:31:37
【问题描述】:

我在一个页面上显示了 100 张图片,它们的宽度为 和高度属性改变。图像 ID 处于循环中。

如何在这个循环中获得原始图像大小?

$(this).appendTo(".prod_image").attr('height',150).attr('width',150).attr('title','').attr('name','').attr('alt','').attr('id','id'+i);

【问题讨论】:

标签: jquery image


【解决方案1】:

您可以使用 dom 对象的 naturalWidth 和 naturalHeight 属性来检索图像的原始尺寸。

例如。

var image = document.getElementById('someImage');

var originalWidth = image.naturalWidth; 
var originalHeight = image.naturalHeight;

使用 jQuery,它看起来像:

var image = $('#someImage');

var originalWidth = image[0].naturalWidth; 
var originalHeight = image[0].naturalHeight;

【讨论】:

  • +1 有一个重要的说明,即 IE 8 及更低版本不支持此功能(因此旧版浏览器需要额外的后备)。
  • 这是似乎有效的语法:image.prop("naturalWidth")(如related question所示。
【解决方案2】:

HTML:

  <img id="myimg" src="http://azart-cash.ru/big_pics/kazino_AzartPlay.png"
  width="120" height="140"/>

JavaScript:

var img = new Image();
img.onload = function() {
  alert(this.width + 'x' + this.height);
}
img.src = $("#myimg").attr('src');

或者在这里查看http://jsfiddle.net/Increazon/A5QJM/1/

【讨论】:

  • 这是迄今为止最简单、最优雅的解决方案。需要在屏幕外渲染元素和自定义 CSS 的投票数较高的选项更慢且更丑。
  • 我认为这很丑陋,不优雅。如果您以 IE8+ 为目标,则 naturalWidth 是一个很好的解决方案
【解决方案3】:

获得原始大小的唯一方法是将其恢复到原始状态。您可以通过克隆图像轻松完成此操作,然后删除高度和宽度属性以获取实际值。然后,您还必须将更改后的图像插入页面,否则它不会具有计算的高度/宽度。您可以在屏幕外 div 中轻松完成此操作。这是一个例子:

http://jsbin.com/ocoto/edit

JS:

// Copy the image, and insert it in an offscreen DIV
aimgcopy = $('#myimg').clone();
$('#store').append(aimgcopy);

// Remove the height and width attributes
aimgcopy.removeAttr('height');
aimgcopy.removeAttr('width');

// Now the image copy has its "original" height and width
alert('Height: '+aimgcopy.height()+' Width: '+aimgcopy.width());

CSS:

  #store {  position: absolute;  left: -5000px; }

HTML:

  <img id="myimg" src="http://sstatic.net/so/img/logo.png" width="300" height="120"/>
  <div id="store"></div>

【讨论】:

    【解决方案4】:

    我必须使用我创建的 jQuery 插件执行类似的任务。它保持输入文本值的状态,但该原理可以很容易地用于您的宽度和高度。

    我将创建一个自定义对象来存储原始对象的 ID、宽度和高度。然后将该对象放入一个数组中。当需要恢复值时,只需循环自定义对象数组以匹配 ID 和宾果游戏,即具有原始宽度和高度的对象。

    您可以在www.wduffy.co.uk/jLabel 查看我的插件代码,了解我是如何实现的。不过,根据您要更改的图像数量,阵列可能会变得有点重。

    一个例子可能看起来像

    var states = new Array();
    
    function state($obj) {
    
        // Public Method: equals
        this.equals = function($obj) {
            return $obj.attr('id') == this.id;
        };
    
        // Public Properties
        this.id = $obj.attr('id');
        this.width = $obj.attr('width');
        this.height = $obj.attr('height');
    
    };
    
    function getState($obj) {
        var state; 
    
        $.each(states, function() {
            if (this.equals($obj)) {
                state = this;
                return false; // Stop the jQuery loop running
            };
        });
    
        return state;
    };
    

    【讨论】:

      【解决方案5】:

      试试这个:

      $("<img>")
                  .attr("src", element.attr("src"))
                  .load(function(){
                      MG.originalSize[0] = this.width;
                      MG.originalSize[1] = this.height;
      

      });

      【讨论】:

        猜你喜欢
        • 2012-04-04
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 2012-11-07
        相关资源
        最近更新 更多