Mercurial > hg > digilib
comparison client/digitallibrary/jquery/jquery.digilib.js @ 744:78ed5b49259d jquery
zoom-drag background follows birdZoom also in embedded mode (still imprecise)
author | hertzhaft |
---|---|
date | Sat, 05 Feb 2011 17:12:45 +0100 |
parents | 6bc89f3634a1 |
children | 5d3da97089bc |
comparison
equal
deleted
inserted
replaced
743:e07080f24f56 | 744:78ed5b49259d |
---|---|
1287 // bird's eye view zoom area click and drag handler | 1287 // bird's eye view zoom area click and drag handler |
1288 var setupBirdDrag = function(data) { | 1288 var setupBirdDrag = function(data) { |
1289 var $birdImg = data.$birdImg; | 1289 var $birdImg = data.$birdImg; |
1290 var $birdZoom = data.$birdZoom; | 1290 var $birdZoom = data.$birdZoom; |
1291 var $document = $(document); | 1291 var $document = $(document); |
1292 var startPos, newRect, birdImgRect, birdZoomRect, fullRect; | 1292 var $scaler = data.$scaler; |
1293 var startPos, newRect, birdImgRect, birdZoomRect, fullRect, scalerPos; | |
1293 | 1294 |
1294 // mousedown handler: start dragging bird zoom to a new position | 1295 // mousedown handler: start dragging bird zoom to a new position |
1295 var birdZoomStartDrag = function(evt) { | 1296 var birdZoomStartDrag = function(evt) { |
1296 startPos = geom.position(evt); | 1297 startPos = geom.position(evt); |
1297 // position may have changed | 1298 // position may have changed |
1298 data.birdTrafo = getImgTrafo($birdImg, FULL_AREA); | 1299 data.birdTrafo = getImgTrafo($birdImg, FULL_AREA); |
1299 birdImgRect = geom.rectangle($birdImg); | 1300 birdImgRect = geom.rectangle($birdImg); |
1300 birdZoomRect = geom.rectangle($birdZoom); | 1301 birdZoomRect = geom.rectangle($birdZoom); |
1302 scalerPos = geom.position($scaler); | |
1301 newRect = null; | 1303 newRect = null; |
1302 fullRect = setZoomBG(data); // setup zoom background image | 1304 fullRect = setZoomBG(data); // setup zoom background image |
1303 $document.bind("mousemove.dlBirdMove", birdZoomMove); | 1305 $document.bind("mousemove.dlBirdMove", birdZoomMove); |
1304 $document.bind("mouseup.dlBirdMove", birdZoomEndDrag); | 1306 $document.bind("mouseup.dlBirdMove", birdZoomEndDrag); |
1305 return false; | 1307 return false; |
1311 var delta = startPos.delta(pos); | 1313 var delta = startPos.delta(pos); |
1312 // move birdZoom div, keeping size | 1314 // move birdZoom div, keeping size |
1313 newRect = birdZoomRect.copy(); | 1315 newRect = birdZoomRect.copy(); |
1314 newRect.addPosition(delta); | 1316 newRect.addPosition(delta); |
1315 newRect.stayInside(birdImgRect); | 1317 newRect.stayInside(birdImgRect); |
1316 // acount for border width | |
1317 newRect.addPosition({x : -2, y : -2}); | |
1318 newRect.adjustDiv($birdZoom); | |
1319 // reflect birdview zoom position in scaler image | 1318 // reflect birdview zoom position in scaler image |
1320 // TODO: account for scaler position in embedded mode? | |
1321 var area = data.birdTrafo.invtransform(newRect); | 1319 var area = data.birdTrafo.invtransform(newRect); |
1322 var imgArea = data.imgTrafo.transform(area); | 1320 var imgArea = data.imgTrafo.transform(area); |
1323 var offset = imgArea.getPosition().neg(); | 1321 var offset = imgArea.getPosition().neg(); |
1322 offset.add(scalerPos); | |
1323 console.log('offset', offset); | |
1324 if (fullRect) { | 1324 if (fullRect) { |
1325 var bgPos = fullRect.getPosition().add(offset); | 1325 var bgPos = fullRect.getPosition().add(offset); |
1326 } else { | 1326 } else { |
1327 var bgPos = offset; | 1327 var bgPos = offset; |
1328 } | 1328 } |
1329 // move the background image to the new position | 1329 // move the background image to the new position |
1330 data.$scaler.css({ | 1330 data.$scaler.css({ |
1331 'background-position' : bgPos.x + "px " + bgPos.y + "px" | 1331 'background-position' : bgPos.x + "px " + bgPos.y + "px" |
1332 }); | 1332 }); |
1333 // acount for border width | |
1334 newRect.addPosition({x : -2, y : -2}); | |
1335 newRect.adjustDiv($birdZoom); | |
1333 return false; | 1336 return false; |
1334 }; | 1337 }; |
1335 | 1338 |
1336 // mouseup handler: reload page | 1339 // mouseup handler: reload page |
1337 var birdZoomEndDrag = function(evt) { | 1340 var birdZoomEndDrag = function(evt) { |
1390 if (data.hasBgSize) { | 1393 if (data.hasBgSize) { |
1391 // full-size background using CSS3-background-size | 1394 // full-size background using CSS3-background-size |
1392 fullRect = data.imgTrafo.transform(FULL_AREA); | 1395 fullRect = data.imgTrafo.transform(FULL_AREA); |
1393 if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) { | 1396 if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) { |
1394 // correct offset because background is relative | 1397 // correct offset because background is relative |
1395 var scalePos = geom.position($scaler); | 1398 var scalerPos = geom.position($scaler); |
1396 fullRect.addPosition(scalePos.neg()); | 1399 fullRect.addPosition(scalerPos.neg()); |
1397 var url = getBirdImgUrl(data, ['rot', 'mo']); | 1400 var url = getBirdImgUrl(data, ['rot', 'mo']); |
1398 scalerCss['background-image'] = 'url(' + url + ')'; | 1401 scalerCss['background-image'] = 'url(' + url + ')'; |
1399 scalerCss[data.bgSizeName] = fullRect.width + 'px ' + fullRect.height + 'px'; | 1402 scalerCss[data.bgSizeName] = fullRect.width + 'px ' + fullRect.height + 'px'; |
1400 scalerCss['background-position'] = fullRect.x + 'px '+ fullRect.y + 'px'; | 1403 scalerCss['background-position'] = fullRect.x + 'px '+ fullRect.y + 'px'; |
1401 } else { | 1404 } else { |
1442 // move the background image to the new position | 1445 // move the background image to the new position |
1443 $scaler.css({ | 1446 $scaler.css({ |
1444 'background-position' : bgPos.x + "px " + bgPos.y + "px" | 1447 'background-position' : bgPos.x + "px " + bgPos.y + "px" |
1445 }); | 1448 }); |
1446 // set birdview indicator to reflect new zoom position | 1449 // set birdview indicator to reflect new zoom position |
1447 // TODO: get rid of indicator wobble | |
1448 var za = geom.rectangle($img); | 1450 var za = geom.rectangle($img); |
1449 za.addPosition(delta.neg()); | 1451 za.addPosition(delta.neg()); |
1450 setBirdZoom(data, za); | 1452 setBirdZoom(data, za); |
1451 return false; | 1453 return false; |
1452 }; | 1454 }; |