Pellizca para hacer zoom con CSS3

Estoy intentando implementar gestos de pellizco para hacer zoom exactamente como en Google Maps. Vi una charla de Stephen Woods -"Creando Interfaces Touch HTML5 Responsivas" - Sobre el tema y utilizando la técnica mencionada. La idea es establecer el origen de transformación del elemento de destino en (0, 0) y escalar en el punto de la transformación. Luego, traduzca la imagen para mantenerla centrada en el punto de transformación.

En mi código de prueba el escalado funciona bien. La imagen se acerca y se aleja bien entre las traducciones posteriores. El problema es que no estoy calculando correctamente los valores de traducción. Estoy usando jQuery y Hammer.js para eventos táctiles. ¿Cómo puedo ajustar mi cálculo en la devolución de llamada de transformación para que la imagen permanezca centrada en el punto de transformación?

El CoffeeScript (#test-resize es undiv con una imagen de fondo)

image = $('#test-resize')

hammer = image.hammer ->
  prevent_default: true
  scale_treshold: 0

width = image.width()
height = image.height()
toX = 0
toY = 0
translateX = 0
translateY = 0
prevScale = 1
scale = 1

hammer.bind 'transformstart', (event) ->

  toX = (event.touches[0].x + event.touches[0].x) / 2
  toY = (event.touches[1].y + event.touches[1].y) / 2

hammer.bind 'transform', (event) ->

  scale = prevScale * event.scale
  shiftX = toX * ((image.width() * scale) - width) / (image.width() * scale)
  shiftY = toY * ((image.height() * scale) - height) / (image.height() * scale)
  width = image.width() * scale
  height = image.height() * scale

  translateX -= shiftX
  translateY -= shiftY

  css = 'translateX(' + @translateX + 'px) translateY(' + @translateY + 'px) scale(' + scale + ')'
  image.css '-webkit-transform', css
  image.css '-webkit-transform-origin', '0 0'

hammer.bind 'transformend', () ->
  prevScale = scale

Respuestas a la pregunta(5)

Su respuesta a la pregunta