2011-11-06 26 views
7

我創建了一個很酷的圖像查看器,但卡在一個特定的部分:放大時平移圖像。這似乎是一個微不足道的問題,我已經嘗試了幾乎所有關於SO的類似問題的答案,但每次,某些工作不正確。我需要一雙新鮮的眼睛。如何使用jQuery正確地放大比其容器大的圖像?

我已經在我的開發服務器上臨時打開了一個URL。看看這個頁面:

[URL關閉]

接下來,向上移動鼠標滾輪來觸發變焦。我們到了。放大後,點擊並拖動以嘗試平移圖像。它正在平移,但有些不對。這是目前用於平移代碼:

var clicking = false; 
var previousX; 
var previousY; 

$("#bigimage").mousedown(function(e) { 

    e.preventDefault(); 
    previousX = e.clientX; 
    previousY = e.clientY; 
    clicking = true; 
}); 

$(document).mouseup(function() { 
    clicking = false; 
}); 

$("#bigimage").mousemove(function(e) { 

    if (clicking) { 
     e.preventDefault(); 
     var directionX = (previousX - e.clientX) > 0 ? 1 : -1; 
     var directionY = (previousY - e.clientY) > 0 ? 1 : -1; 
     $("#bigimage").scrollLeft($("#bigimage").scrollLeft() + 10 * directionX); 
     $("#bigimage").scrollTop($("#bigimage").scrollTop() + 10 * directionY); 
     previousX = e.clientX; 
     previousY = e.clientY; 
    } 
}); 

我正在尋找解決方案具有以下特性:

  • 平移在X和Y軸的方向正確
  • 它不應該是可以在圖像的邊緣外部平移
  • 合理流暢的平移
  • 不錯:窗口大小調整不應引起任何問題

儘管我很欣賞我可以獲得的任何幫助,但請不要將我指向一個通用插件,我已經嘗試過太多,因此我正在尋找適用於特定場景的答案。我非常絕望,我甚至會爲滿足上述特徵的完美解決方案設置金錢賞金。

PS:請嘗試在Firefox或鏈接一個WebKit瀏覽器

+0

你能描述什麼不工作,並提供小提琴嗎?據我所知,在沒有縮放的情況下,圖像已經出現了一些平移問題。我以前創建了一個背景平移腳本,只需移動鼠標,看到[這個答案](http://stackoverflow.com/questions/7776843/mouse-on-left-of-screen-move-image-to-left - 鼠標右鍵同屏/ 7777153#7777153)獲得靈感。 –

+0

@RobW謝謝,但有了背景圖像的方法將是整個事情的一個重大改革,太多的依賴關係,我想整個放棄這個功能。我希望它可以使用滾動方法修復。 – Ferdy

+0

正如你可以在我的小提琴中看到的那樣,平移並不困難,並且可以高效地完成。您的問題可能是由於編寫代碼而不考慮如何有效地實現它。縮放可以通過使用適當的邏輯和'background-size' CSS屬性輕鬆完成。我已經實施了平移。將兩者加在一起會產生所需的功能。如果你提供了一些相關的代碼,我可能會考慮看看它。 –

回答

8

我已經放在一起的jsfiddle它做什麼,我想你想要做的事。

http://jsfiddle.net/CqcHD/2/

它滿足您的條件的所有4。讓我知道,如果我誤解了你的預期結果

+0

非常感謝。抱歉耽擱了。我使用你的代碼,甚至在生產環境中部署它:http://www.jungledragon.com/image/2638/caiman_in_camouflage.html/zoom它的工作原理合理,但平移仍然存在問題:放大時,似乎我不能平移到圖像的外邊緣,它似乎裁剪。有任何想法嗎? – Ferdy

+0

我看不到你的javascript,因爲它全部縮小了,所以這是完全的推測,但它看起來像在縮放的行爲中,你將圖像的左邊部分從文檔的左邊界推出,而不是似乎想要平移文檔視口的左邊界 –

+0

啊,忘了關於縮小。這裏是原始的js:http://www.jungledragon.com/js/slidedragon_001.js – Ferdy