Próbuję zaimplementować gesty szczypta na zoom dokładnie tak, jak w Google Maps. Obejrzałem rozmowę Stephen Woods - "Creating Responsive HTML5 Touch Interfaces” - o problemie i wykorzystałem wspomnianą technikę. Chodzi o to, aby ustawić początek transformacji elementu docelowego na (0, 0) i skalę w punkcie transformacji. Następnie przetłumaczyć obraz, aby zachować go w środku w punkcie transformacji.Szczypta, aby powiększyć za pomocą CSS3
W moim kodzie testowym skalowanie działa dobrze. Obraz jest powiększany i pomniejszany między kolejnymi tłumaczeniami. Problem polega na tym, że nie obliczam poprawnie wartości translacji. Korzystam z jQuery i Hammer.js dla zdarzeń dotykowych. Jak mogę dostosować moje obliczenia w oddzwanianiu transformacyjnym, aby obraz pozostał wyśrodkowany w punkcie transformacji?
The coffeescript (#test-resize
jest div
z obrazu tła)
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
ów mojego kota! !! ?? –
Drugi link jest uszkodzony. –
Jest naprawdę dobry punkt od Stephena Woodsa: Czy absolutnie nic więcej w kodzie podczas transformacji z css (nie ładowanie itp.). Dużo pomógł we własnym projekcie. – Hardy