2009-11-16 9 views
12

$('img').height() devuelve 0 en cromo, pero devuelve la altura real en IE y Firefox.altura de la imagen con el problema de jquery en cromo

¿Cuál es el método real para obtener la altura de la imagen en cromo?

+0

¿Tiene 'height' especificado en la etiqueta' img' o en el CSS? –

+0

es el img visible, es decir, se ha mostrado? –

+6

Haz cosas que no estén en '$ (document) .ready' pero en' $ (window) .load'. Funcionó para mí - http://www.fortwaynewebdevelopment.com/jquery-width-or-height-always-returns-0-fix/ – jibiel

Respuesta

1

Mi hipótesis es que se llama a esta función antes de que la imagen termine de cargarse. ¿Puedes intentar poner un retraso en la función para ver si este es realmente el caso? Si este es el caso, puede hacer trampa usando un temporizador antes de ejecutar la función.

Es un poco más complicado de detectar cuando se carga una imagen. Have a look at this script for some ideas - tal vez te funcione.

+0

O ejecute el script en un evento de carga del cuerpo, en lugar del evento listo para el documento. No es tan preciso, ya que todo el documento tiene que cargarse, pero puede estar seguro de que la imagen se ha cargado (suponiendo que se trata de una imagen en el código, no de algo cargado con AJAX). –

+2

@Frank, la carga del cuerpo recibe una llamada cuando el DOM se termina de crear, pero no se garantiza que los activos dentro del DOM hayan terminado de cargarse (imágenes incluidas). – JasonWyatt

9

Como mencionó Josh, si la imagen aún no se ha cargado por completo, jQuery no sabrá cuáles son las dimensiones todavía. Pruebe algo como esto para asegurarse de que sólo está tratando de acceder a sus dimensiones después de que la imagen se ha cargado completamente:

var img = new Image(); 

$(img).load(function() { 
    //-- you can determine the height before adding to the DOM 
    alert("height: " + img.height); 
    //-- or you can add it first... 
    $('body').append(img); 
    //-- and then check 
    alert($('body img').height()); 
}).error(function() { 
    //-- this will fire if the URL is invalid, or some other loading error occurs 
    alert("DANGER!... DANGER!..."); 
}); 

$(img).attr('src', "http://sstatic.net/so/img/logo.png"); 
1

Una solución poco feo pero eficaz que utilicé era utilizar un lenguaje backend, en mi caso php, para obtener la altura y configurarla en la imagen antes de enviarla al navegador.

es feo, pero simple y rápida

1

La carga previa de la imagen y la creación de una función de devolución de llamada puede ser lo que estás buscando:

// simple image preloader 
function getHeight(el,fn) { 
    var img = new Image(); 
    img.onload = function() { fn(img.height); }; 
    img.src = el.attr("src"); 
} 

$("img").each(function(){ 
    getHeight($(this),function(h){ 
     // what you need to do with the height value here 
     alert(h); 
    }); 
}); 
-1

Sólo tenían el mismo problema: establecer la anchura y altura de antemano a través de CSS o HTML.

0

que acababa de hacer algunos experimentos con esto me he dado cuenta que

$(this).height(); 

Devuelve 0 - eso si usted sólo tiene que utilizar el viejo y simple JS

this.height; 

me da la altura de la imagen correcta.

Cuestiones relacionadas