Javascript

Bild-Maße mit Javascript auslesen


(klicken zum vergrößern)

Bilder sind das Salz in der Suppe von Web-Seiten. So illustriere auch ich in diesem Web den ein oder anderen Beitrag mit einem Screenshot oder ähnlichem. Damit man auf dem Bild auch etwas erkennen kann, der Textfluss aber nicht durch ein großes Bild gestört wird, wird in solchen Fällen lediglich ein kleines Vorschaubild in den Text integriert und auf Mausklick öffnet sich das Originalbild in einem Pseudo-Dialog. Ein Beispiel ist die kleine Illustration hier gleich links.

Für diese Funktionalität verwende ich das jQuery-Plugin BlockUI und etwas zusätzliches Javascript, wobei immer beide Bilder geladen werden, aber nur das kleine Vorschaubild angezeigt wird. Die Anzeige des Originalbilds wird über die CSS-Anweisung display:none unterdrückt. Wird nun auf das Vorschaubild geklickt, werden die Masse des Originalbildes ausgelesen und für die korrekte Anzeige des Popups verwendet. Und genau da liegt bei manchen Browsern der Haken...

Normalerweise, so beschreibt es u.a. SelfHTML, kann man mit Javascript die Maße eines Bildes wie folgt auslesen:

<!-- Vorschaubild -->
<img src="images/vorschau.gif" onclick="showFullImage('original');">
<!-- Originalbild -->
<img src="images/original.gif" id="original" style="display:none">

<script type="text/javascript">

	function showFullImage (sID) {
    	var iHeight = document.images[sID].height;
    	var iWidth = document.images[sID].width;
    	//... Erstellen des Popups mit den Maßen des Originalbildes
    }

</script>

Das funktioniert in allen Gecko- (Firefox) und WebKit-Browsern (Safari) gut, aber nicht im Internet Explorer und in Opera, da das Bild nicht über die Attribute height und width verfügt. Die beiden geben schlichtweg 0 aus. Nun könnte man sagen "geb den Bildern doch einfach die Attribute", doch es geht auch anders. Der Trick ist, das Bild per Javascript in ein Image-Objekt zu laden und dann die Maße auszulesen:

<!-- Vorschaubild -->
<img src="images/vorschau.gif" onclick="showFullImage('original');">
<!-- Originalbild -->
<img src="images/original.gif" id="original" style="display:none">

<script type="text/javascript">

	var popupImg;

	function showFullImage(sID) {
		popupImg = new Image();
		popupImg.src = document.images[sID].src;
		waitUntilPopupImageLoaded();
    }

    function waitUntilOriginalImageLoaded() {
		if(popupImg.complete){
			var iHeight = popupImg.height;
			var iWidth = popupImg.width;
			//... Erstellen des Popups mit den Maßen des Originalbildes
		} else {
			setTimeout("waitUntilPopupImageLoaded();",100);
		}
    }

</script>

In der Methode showFullImage wird zunächst die globale Variable popupImg mit einem neuen Image-Objekt bestückt, in das dann über das src-Attribut das Originalbild geladen wird. Dieses liegt zwar schon im Cache, es ist jedoch besser erst dann mit der Darstellung des Popups fortzufahren, wenn absolut sicher ist, daß der Ladevorgang abgeschlossen ist. Dafür verzweigt der Code in die Methode waitUntilOriginalImageLoaded, die solange setTimeout aufruft, bis das Image-Objekt-Attribut complete den Wert true zurückliefert. Anschließend kann man sicher die Höhe und die Breite des Bildes ermitteln.

kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

Verwandte Artikel

Google Chart API einsetzen

247 Kommentare bislang...

  • bsfurt cialis kaufen VgQzV viagra >:-OOO viagra en ligne 0091 cialis 2936 viagra online 7594 cialis 0798
    247
    cialis kaufen : Samstag, 4. Februar 2012 07:45
  • dqxobuxq accutane 8]]] generic cialis rzuki viagra 8947 propecia DObkzN
    246
    accutane : Freitag, 3. Februar 2012 18:17
  • There was so little hint of the aristocrat in cheap sale uk
    Lemuel Shackford's sordid life and person that no one suspected him of even self-esteem. He went as meanly dressed as a tramp, and as cheap trainers
    careless of contemporary criticism; yet clear down in his liver, or somewhere in his anatomy, he nourished an odd abstract pride in the family Shackford. Heaven knows why! To be sure, it dated far back; its women had always been virtuous, boots and trainers sale and its men, if not always virtuous, had always been ship-captains.
    245
    boots and trainers sale : Freitag, 3. Februar 2012 04:13
  • I love this article, it's very well.<a href="http://www.sunglassbranded.org/oakley-

    sunglasses-c-18.html">oakley sunglasses sale</a><a

    href="http://www.replicaoakleyglass.org/replica-oakley-flak-jacket-sunglasses-c-

    11.html">Fake Oakley Flak Jacket Sunglasses</a><a

    href="http://www.sunglassbranded.org/oakley-sunglasses-oakley-polarized-sunglasses-c-

    18_58.html">replica Oakley Polarized Sunglasses</a><a

    href="http://www.oakleyshadestores.com/fake-oakley-batwolf-c-33.html">Oakley Batwolf

    sunglasses outlet</a><a href="http://www.sunglassbranded.org/oakley-sunglasses-c-

    18.html">oakley sunglasses wholesale</a><a href="http://www.replicaoakleyglass.org/replica-

    oakley-flak-jacket-sunglasses-c-11.html">Replica Oakley Flak Jacket Sunglasses</a><a

    href="http://www.sunglassbranded.org/oakley-sunglasses-oakley-restless-sunglasses-c-

    18_72.html">Oakley Restless Sunglasses</a><a href="http://www.oakleyshadestores.com/fake-

    oakley-dispatch-c-27.html">Oakley Dispatch sunglasses</a>
    244
    dsfsdfds : Montag, 30. Januar 2012 04:38
  • I wonder how you got so good. This is really a fascinating blog, lots of stuff that I can get into. One thing I just want to say is that your Blog is so perfect!
    243
    Kamagra : Dienstag, 24. Januar 2012 13:25

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 245

  • Datum: 19.01.2008
    Kategorie: Javascript
    Zugriffe: 8.380
    Kommentare: 247
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei