comparison client/digitallibrary/jquery/jquery.digilib.js @ 748:fb4ffac2950d jquery

ugly workaround for IE7 image load handler bug
author hertzhaft
date Sun, 06 Feb 2011 18:25:41 +0100
parents 5d3da97089bc
children 8452a485e0e7
comparison
equal deleted inserted replaced
747:5d3da97089bc 748:fb4ffac2950d
354 data.$birdDiv.show(); 354 data.$birdDiv.show();
355 } 355 }
356 // about window creation - TODO: could be deferred? restrict to only one item? 356 // about window creation - TODO: could be deferred? restrict to only one item?
357 setupAboutDiv(data); 357 setupAboutDiv(data);
358 // drag zoom area around in scaler div 358 // drag zoom area around in scaler div
359 setupZoomDrag(data); 359 // setupZoomDrag(data); // is done in scalerImgLoadedHandler()
360 }); 360 });
361 }, 361 },
362 362
363 // destroy: clean up digilib 363 // destroy: clean up digilib
364 destroy : function(data) { 364 destroy : function(data) {
1141 }; 1141 };
1142 1142
1143 // returns function for load event of bird's eye view img 1143 // returns function for load event of bird's eye view img
1144 var birdImgLoadedHandler = function (data) { 1144 var birdImgLoadedHandler = function (data) {
1145 return function () { 1145 return function () {
1146 var $img = $(this); 1146 var $birdImg = $(this);
1147 console.debug("birdimg loaded! this=", this, " data=", data); 1147 var birdRect = geom.rectangle($birdImg);
1148 // create Transform from current area and picsize 1148 console.debug("birdImg loaded!", $birdImg, "rect=", birdRect, "data=", data);
1149 data.birdTrafo = getImgTrafo($img, FULL_AREA); 1149 if (birdRect.width === 0) {
1150 // malheureusement IE7 calls load handler when there is no size info yet
1151 setTimeout(function () { $birdImg.triggerHandler('load') }, 200);
1152 }
1150 // display red indicator around zoomarea 1153 // display red indicator around zoomarea
1151 renderBirdArea(data); 1154 renderBirdArea(data);
1152 // enable click and drag 1155 // enable click and drag
1153 setupBirdDrag(data); 1156 setupBirdDrag(data);
1154 }; 1157 };
1183 $birdZoom.hide(); 1186 $birdZoom.hide();
1184 return; 1187 return;
1185 } else { 1188 } else {
1186 $birdZoom.show(); 1189 $birdZoom.show();
1187 } 1190 }
1188 // position may have changed 1191 // create Transform from current area and picsize
1189 data.birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA); 1192 data.birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA);
1190 var zoomRect = data.birdTrafo.transform(zoomArea); 1193 var zoomRect = data.birdTrafo.transform(zoomArea);
1194 console.debug("renderBirdArea:", zoomRect, "zoomArea:", zoomArea, "$birdTrafo:", data.birdTrafo);
1191 // acount for border width 1195 // acount for border width
1192 zoomRect.addPosition({x : -2, y : -2}); 1196 zoomRect.addPosition({x : -2, y : -2});
1193 if (data.settings.interactionMode === 'fullscreen') { 1197 if (data.settings.interactionMode === 'fullscreen') {
1194 // no animation for fullscreen 1198 // no animation for fullscreen
1195 zoomRect.adjustDiv($birdZoom); 1199 zoomRect.adjustDiv($birdZoom);
1196 } else { 1200 } else {
1197 // nice animation for embedded mode :-) 1201 // nice animation for embedded mode :-)
1198 // correct offsetParent because animate doesn't use offset 1202 // correct offsetParent because animate doesn't use offset
1199 var ppos = $birdZoom.offsetParent().offset(); 1203 var ppos = $birdZoom.offsetParent().offset();
1200 var dest = { 1204 var dest = {
1201 left : (zoomRect.x - ppos.left) + 'px', 1205 left : (zoomRect.x - ppos.left) + 'px',
1202 top : (zoomRect.y - ppos.top) + 'px', 1206 top : (zoomRect.y - ppos.top) + 'px',
1203 width : zoomRect.width, 1207 width : zoomRect.width,
1204 height : zoomRect.height}; 1208 height : zoomRect.height
1209 };
1205 $birdZoom.animate(dest); 1210 $birdZoom.animate(dest);
1206 } 1211 }
1207 }; 1212 };
1208 1213
1209 // zooms by the given factor 1214 // zooms by the given factor
1338 // reflect birdview zoom position in scaler image 1343 // reflect birdview zoom position in scaler image
1339 var area = data.birdTrafo.invtransform(newRect); 1344 var area = data.birdTrafo.invtransform(newRect);
1340 var imgArea = data.imgTrafo.transform(area); 1345 var imgArea = data.imgTrafo.transform(area);
1341 var offset = imgArea.getPosition().neg(); 1346 var offset = imgArea.getPosition().neg();
1342 offset.add(scalerPos); 1347 offset.add(scalerPos);
1343 console.log('offset', offset);
1344 if (fullRect) { 1348 if (fullRect) {
1345 var bgPos = fullRect.getPosition().add(offset); 1349 var bgPos = fullRect.getPosition().add(offset);
1346 } else { 1350 } else {
1347 var bgPos = offset; 1351 var bgPos = offset;
1348 } 1352 }