Fonction jQuery pour redimensionner un ensemble d’images sur une zone donnée (pas de hauteur ni de largeur)

J’essaie d’écrire une fonction jQuery qui redimensionnera un ensemble d’images en fonction d’une zone spécifiée, plutôt que d’une simple hauteur ou largeur maximale.

Il y a une question similaire ici: redimensionner l’image par zone , mais j’aimerais que cela fonctionne en jquery et avec plusieurs images en même temps.

Voici ce avec quoi je travaille actuellement: http://jsfiddle.net/szSE5/21/ – cela ne fonctionne pas comme je le pensais pour le moment.

Que dis-tu de ça:

jQuery.fn.resizeImgByArea = function(avgDimension){ var $this = $(this), oldW = $this.width(), oldH = $this.height(), RatiO = new Number(oldW/oldH), newH = new Number(Math.round(Math.sqrt(avgDimension/RatiO))), newW = new Number (Math.round(newH * RatiO)); $this.css({ width: newW + 'px', height: newH + 'px' }); } $(document).ready(function() { $('#images img').each(function(){$(this).resizeImgByArea(10000)}); }); 

Dans votre violon: http://jsfiddle.net/szSE5/21/

 jQuery.fn.resizeImgToArea = function(area) { this.each(function() { var imgElement = $(this); var originalWidth = imgElement.width(); var originalHeight = imgElement.height(); var aspectRatio = originalWidth / originalHeight; var newHeight = Math.round(Math.sqrt(area/aspectRatio)); var newWidth = Math.round(aspectRatio * newHeight); imgElement.width(newWidth); imgElement.height(newHeight); }); return this; }; 

À première vue, votre solution jsfiddle ne fonctionne pas car “ceci” dans votre contexte est un élément DOM droit, pas un object jQuery.