Reply to comment

Drupal CMS, Zoomify und der IE (10) - so erspart Ihr Euch sehr viele Probleme

In einem Kundenprojekt hatten wir gerade extrem fiese Probleme mit der Bilder Zoom Library Zoomify unter Verwendung des IE (10). Ich möchte Euch gerne an den Ursachen teilhaben lassen, damit Ihr Euch viel Ärger erspart.

Problem:

Im IE 10 wird der "Navigator" (kleines Vorschaubild zur Orientierung) von Zoomify auf einer Drupal 7 Website nicht angezeigt. Sämtliche anderen Browser arbeiten einwandfrei damit.

Ursache:

Wir setzten "Adaptive Theme" als Grundlage unserer Entwicklungen ein. Dieses verwendet ein sog. "CSS Reset", in welchem der folgende Codeschnippsel enthalten ist:

  1. img {
  2.   height: auto;
  3. }

Und genau da liegt das Problem! IE10 + Zoomify kommen damit nicht klar. Vermutlich, weil die Höhe des Bildes damit für den IE nicht mehr berechenbar ist.

Lösung:

Einfach für diesen speziellen Fall den "auto"-Wert des img überschreiben:

  1. #navigatorImageContainer img {
  2.   height: inherit;
  3. }

Diese Ursache zu finden hat mich verdammt viele graue Haare gekostet, da das Debugging im IE10 mit canvas-Elementen quasi unmöglich ist. Vermutlich der nervigste Fehler seit mehreren Jahren... ;)

PS: Der IE10 kommt übrigens auch nicht mit relativen Breiten für Zoomify klar - während es in allen anderen Browsern super klappt! Traurig! Auch da hilft nur ein Workaround:

  1. jQuery(window).load(function() {
  2.     jQuery('#zoomify').children().width('100%');
  3.     jQuery('.zoomify').children().height(imgHeightAbs);
  4.     var viewerW = Z.Viewport.getW();
  5.     var viewerH = Z.Viewport.getH();
  6.     var ratio = viewerW / viewerH;
  7.  
  8.     //#webksde#JP20130726: Breite mobilgeraetefaehig errechnen.
  9.     var imgWidthAbs = jQuery("#main-content").width();
  10.     var imgHeightAbs = (imgWidthAbs / ratio);
  11.     Z.Viewer.setSizeAndPosition(imgWidthAbs, imgHeightAbs, 0, 0, true);
  12.   });

UPDATE:

Hier das vollständige, zugegeben nicht sonderlich ruhmreiche Script, das immerhin ein akzeptables Ergebnis auf Mobilgeräten zaubert... ich hoffe auf eine bessere Lösung und entsprechende API-Optimierungen bei Zeiten. Hier sind zahlreiche Detailprobleme eingeflossen:

  1. function _init_zoomify_resize() {
  2.   jQuery(window).load(function() {
  3.     setTimeout(function() {
  4.       _zoomify_resize();
  5.     }, 2000);
  6.   });
  7.  
  8.   jQuery(window).on("orientationchange", function(event) {
  9.     _zoomify_resize();
  10.   });
  11. }
  12.  
  13. function _zoomify_resize() {
  14.   var viewerW = Z.Viewport.getW();
  15.   var viewerH = Z.Viewport.getH();
  16.   var ratio = viewerW / viewerH;
  17.  
  18.   //#webksde#JP20130726: Breite mobilgeraetefaehig errechnen.
  19.   var imgWidthAbs = Math.round(jQuery("#main-content").width());
  20.   var imgHeightAbs = Math.round((imgWidthAbs / ratio));
  21.   jQuery('.zoomify').children().width(imgWidthAbs + 'px');
  22.   jQuery('.zoomify').children().height(imgHeightAbs + 'px');
  23.  
  24.   Z.Viewer.setSizeAndPosition(imgWidthAbs, imgHeightAbs, 0, 0, true);
  25.   Z.Viewer.setImagePath(Z.imagePath);
  26.  
  27.   setTimeout(function() {
  28.     if (imgWidthAbs <= 300) {
  29.       Z.Navigator.setVisibility(false);
  30.       Z.Toolbar.setVisibility(false);
  31.     } else {
  32.       Z.Navigator.setVisibility(true);
  33.       Z.Toolbar.setVisibility(true);
  34.     }
  35.   }, 1000);
  36. }

Reply

The content of this field is kept private and will not be shown publicly.

More information about formatting options