2010-05-12 47 views
3

我試圖實現圖像縮放效果,有點像縮放如何與谷歌地圖工作,但與網格的固定位置圖像。使用CSS3轉換JavaScript圖像縮放,如何計算原點? (舉例)

我上傳的是我至今這裏一個例子:

http://www.dominicpettifer.co.uk/Files/MosaicZoom.html

(使用CSS3轉換所以只適用於Firefox,歌劇,Chrome或Safari)

使用鼠標輪放大/縮小。 HTML源代碼基本上是一個帶有inner-div的外部div,inner-div包含了使用絕對位置排列的16個圖像。這將基本上是一個照片馬賽克。

我已經得到了變焦位使用CSS3轉換工作:

$(this).find('div').css('-moz-transform', 'scale(' + scale + ')'); 

...但是,我依靠鼠標X/Y在外DIV位置來放大在鼠標光標與Google地圖的功能類似。問題是,如果你放大圖像,將光標移動到左下角並再次縮放,而不是放大到圖像的底部/左上角,它會放大到整個馬賽克的底部/左側。當您在移動鼠標的同時放大距離,甚至略微放大時,這種效果會出現跳躍效果。

這基本上是問題所在,我希望縮放像谷歌地圖那樣工作,它完全放大鼠標光標位置,但我無法繞過數學計算轉換原點:X/Y值正確。請幫忙,現在已經停留了3天。

以下是完整的代碼清單鼠標滾輪事件:

var scale = 1; 

$("#mosaicContainer").mousewheel(function(e, delta) 
{ 
    if (delta > 0) 
    { 
     scale += 1; 
    } 
    else 
    { 
     scale -= 1; 
    } 
    scale = scale < 1 ? 1 : (scale > 40 ? 40 : scale); 

    var x = e.pageX - $(this).offset().left; 
    var y = e.pageY - $(this).offset().top; 

    $(this).find('div').css('-moz-transform', 'scale(' + scale + ')') 
     .css('-moz-transform-origin', x + 'px ' + y + 'px'); 

    return false; 
}); 
+0

是的你說得對,這只是我吮吸數學,並不能完全計算出正確的方程。今晚我會再來一次。我不知道Seadragon有一個純Silverlight DeepZoom的JavaScript版本,我會檢查一下,歡呼! – 2010-05-14 09:06:57

+0

這是可行的,但並不簡單。您必須跟蹤整個拼圖左上角的虛擬像素座標,以計算鼠標在馬賽克上的位置。另一個困難的事情是'moz-transform-offset'指定了整個變換的中心,但是你想將增量變換應用到變換的中心。 – 2010-05-15 09:06:35

回答