can't get true height/width of object in chrome

后端 未结 4 1343
囚心锁ツ
囚心锁ツ 2021-02-06 03:20

I have a question, if i set a image height in css and try to get height/width i get different results in different browsers. Is there a way to get the same dimension in all brow

相关标签:
4条回答
  • 2021-02-06 03:43

    It looks like it is a race condition, at least it was for me using Chrome. The image isn't finished loading at the time you are getting the dimensions. I set everything to fire after a 200ms timeout and the real width/height are displayed.

        $(document).ready(function() {
            setTimeout("getImageDimensions()", 200);
        });
    
        function getImageDimensions() {
            var pic_real_width;
            var pic_real_height;
    
            $("#topContent img").each(function() {
                var $this = $(this);
                $this.removeAttr("width");
                $this.removeAttr("height");
                $this.css({ width: 'auto', height: 'auto' });
    
                pic_real_width = $this.width();
                pic_real_height = $this.height();
                $this.css({ width: '', height: '100px' });
            });
    
            $("#text").append(" height: " + pic_real_height/*$("#top_img_0").attr("height")*/ + "<br/>");
            $("#text").append(" width: " + pic_real_width/*$("#top_img_0").attr("width")*/ + "<br/>");
        }
    

    Tested and works in Chrome, IE and Firefox. All display 2008 x 3008.

    0 讨论(0)
  • 2021-02-06 03:46

    The images aren't loaded in document.ready, you need to use the window.load event to make sure they're present, like this:

    $(window).load(function(){
        $("#text").append($("#img_0").height());
        $("#text").append($("#img_0").width());
    });
    

    Here's a quick read on the difference, the important part is that pictures are loaded.

    0 讨论(0)
  • 2021-02-06 04:05

    Nick Craver's answer to use $(window).load() is correct, but the images also have a load() method, which allows finer granularity, especially if there are perhaps multiple images to load.

      $(document).ready(function(){ 
        $("#top_img_0").load (function (){
          $("#text").append( "height: " + $("#top_img_0").attr("height")+"<br/>" );
          $("#text").append( "width: " + $("#top_img_0").attr("width")+"<br/>" );   
          }); 
      });
    
    0 讨论(0)
  • 2021-02-06 04:05

    Replace

    $this.css({width: '', height: ''}); 
    

    with

    $this.css({width: 'auto', height: 'auto'});
    

    Opera 10.10 height/width 2008 x 3008

    0 讨论(0)
提交回复
热议问题