完全感謝Michael Chaize和他的教程(http://creativedroplets.com/html5-and-multitouch-hammer-js/),我一直在努力調整他的代碼以便在固定設備寬度的webapp中縮放圖片。Pinch-zoom with Hammer.js
下面的代碼很適合單個圖像,但我很難理解如何讓它在我的Rails應用程序中動態生成圖像列表。
爲了進行說明,下面的代碼包含一個完整的工作示例頁面,其中javascript與顯示的第一個圖像明確關聯。我希望代碼能夠檢測到正在選擇哪個圖像,以便可以縮放頁面中的任何圖像(目前第二個圖像會被忽略,因爲我不知道如何將JavaScript與頁面上的多個圖像進行優雅關聯)。
Hammer.js包含在標題中(儘管未在代碼片段中顯示),並且在第一張圖像上正常工作。
從問題中可以看出,javascript並不是我的專長,因此任何指針都將不勝感激。
<div id="zoomwrapper1">
<div id="zoom1" class="zoomProps" >
<div id="rect1" class="polaroid">
<img id="rect" src="http://i.telegraph.co.uk/multimedia/archive/01842/landscape-rainbow_1842437i.jpg" width="100%" ondragstart="return false" alt="" />
<span>Sample</span>
</div>
</div>
</div>
<div id="zoomwrapper2">
<div id="zoom2" class="zoomProps" >
<div id="rect2" class="polaroid">
<img id="rect2" src="http://i.telegraph.co.uk/multimedia/archive/01842/landscape-rainbow_1842437i.jpg" width="100%" ondragstart="return false" alt="" />
<span>Sample</span>
</div>
</div>
</div>
<script>
var hammertime = Hammer(document.getElementById('zoomwrapper1'), {
transform_always_block: true,
transform_min_scale: 1,
drag_block_horizontal: true,
drag_block_vertical: true,
drag_min_distance: 0
});
var posX=0, posY=0,
lastPosX=0, lastPosY=0,
bufferX=0, bufferY=0,
scale=1, last_scale,
rotation= 1, last_rotation, dragReady=0;
hammertime.on('touch transform', function(ev) {
elemRect = document.getElementById('zoom1');
manageMultitouch(ev);
});
function manageMultitouch(ev){
switch(ev.type) {
case 'touch':
last_scale = scale;
last_rotation = rotation;
break;
case 'drag':
posX = ev.gesture.deltaX + lastPosX;
posY = ev.gesture.deltaY + lastPosY;
break;
case 'transform':
rotation = last_rotation + ev.gesture.rotation;
scale = Math.max(1, Math.min(last_scale * ev.gesture.scale, 10));
break;
case 'dragend':
lastPosX = posX;
lastPosY = posY;
break;
}
var transform =
"translate3d("+posX+"px,"+posY+"px, 0) " +
"scale3d("+scale+","+scale+", 0) ";
elemRect.style.transform = transform;
elemRect.style.oTransform = transform;
elemRect.style.msTransform = transform;
elemRect.style.mozTransform = transform;
elemRect.style.webkitTransform = transform;
}
</script>