Ich versuche Pinch-to-Zoom-Gesten genau wie in Google Maps zu implementieren. Ich sah einen Vortrag von Stephen Woods - "Creating Responsive HTML5 Touch Interfaces” - über das Thema und verwendete die erwähnte Technik. Die Idee ist, den Transformationsursprung des Zielelements auf (0, 0) zu setzen und an dem Punkt der Transformation zu skalieren. Dann übersetze das Bild, um es am Transformationspunkt zentriert zu halten.Prise zum Zoomen mit CSS3
In meiner Testcode-Skalierung funktioniert gut. Das Bild vergrößert und verkleinert sich zwischen nachfolgenden Übersetzungen. Das Problem ist, dass ich die Übersetzungswerte nicht richtig berechne. Ich verwende jQuery und Hammer.js für Berührungsereignisse. Wie kann ich meine Berechnung im Transform Callback so anpassen, dass das Bild zum Zeitpunkt der Transformation zentriert bleibt?
The Coffeescript (#test-resize
ist ein div
mit einem Hintergrundbild)
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
das ist meine Katze! !! ?? –
2. Verbindung ist unterbrochen. –
Es gibt wirklich einen guten Punkt von Stephen Woods: Absolut nichts anderes in Code während der Transformation mit CSS (nicht laden Zeug usw.). Hat viel in meinem eigenen Projekt geholfen. – Hardy