하드웨어 가속화 transform: translate3d() scale3d()
CSS로 핀치 확대 및 패닝을 수행하고 싶습니다. 제스처가 완료되면 변환을 재설정하고 CSS zoom
및 절대 위치로 전환합니다. 이렇게하면 확대/축소 및 이동이 자유 롭습니다. 제스처가 끝나면 내용이 멋지게 재 렌더링됩니다.CSS 변환을 줌 및 위치로 변환
.on('dragend', function(event){
$pinch.css({
// Reset transform
transform: "translate3d(0, 0, 0) "
});
// Convert transform to position
panX += event.gesture.deltaX/zoom;
panY += event.gesture.deltaY/zoom;
$("#content").css({
left: panX,
top: panY
});
})
그러나 핀치 줌 내가 zoom
의 원점 (0, 0)의 차이를 고려하는 방법을 알아낼 수없고 : 나는 계정으로 줌을하면
패닝 잘 작동합니다 몸짓의 기원 (핀치 중간).
.on('transformstart', function (event) {
currentZoom = zoom;
startX = event.gesture.center.pageX;
startY = event.gesture.center.pageY;
originX = startX/currentZoom;
originY = startY/currentZoom;
$pinch.css({
transformOrigin: originX+"px "+originY+"px"
});
})
.on('transform', function (event) {
scale = Math.max(0.25/currentZoom, Math.min(event.gesture.scale, 6/currentZoom));
deltaX = (event.gesture.center.pageX - startX)/currentZoom;
deltaY = (event.gesture.center.pageY - startY)/currentZoom;
$pinch.css({
transform: "translate3d("+deltaX+"px,"+deltaY+"px, 0) " +
"scale3d("+scale+","+scale+", 1) "
});
})
.on('transformend', function (event) {
// Convert scale to zoom
zoom = currentZoom * scale;
zoom = Math.max(0.25, Math.min(zoom, 6));
$pinch.css({
// Reset transform
transform: "translate3d(0, 0, 0) " +
"scale3d(1, 1, 1) ",
zoom: zoom
});
$("#content").css({
top: currentX + deltaX + ????
left: currentY + deltaY + ????
});
})
자료 : http://bl.ocks.org/forresto/6097596 또는 http://codepen.io/forresto/full/KBHDr ... Shift + 마우스 드래그 멀티 터치를 시뮬레이션합니다. CSS zoom
이 Firefox에서 작동하지 않습니다.
Hammer.js 'event.gesture
는
angle: -133.87669728592456
center: Object
pageX: 426
pageY: 337
deltaTime: 853
deltaX: -75
deltaY: -78
direction: "up"
distance: 108.2081327812286
eventType: "end"
pointerType: "touch"
rotation: 0
scale: 1
target: HTMLDivElement
timeStamp: 1375041776946
velocityX: 0.08792497069167643
velocityY: 0.0914419695193435
distance_to_origin_x 및 distance_to_origin_y입니다. 가능한 경우 jQuery CSS 함수 대신 클래스를 사용하십시오. CSS를 CSS 파일로 유지하는 것이 가능한 JavaScript는 내 의견으로는 훨씬 명확하고 이해하기 쉬운 코드로 이어질 수 있습니다. 또한 일부 css3 변수는 자바 스크립트에서 사용할 때 오히려 혼란스러워집니다. 그래서 JavaScript에서 애니메이션을 사용하는 대신 JS에서 타임 아웃을 사용하여 css3 전환을 사용하여 타이밍을 일치시킵니다. 너의 것을 말하지 않는 것은 나쁘다. 단지 개인적인 경험이다. –
내가하고있는'.css()'호출은 모두 동적 위치를 나타냅니다. 또한, jQuery는 브라우저 접두어를 처리합니다. – forresto
덜 마녀도 좋다, 단지 의견이지만, 그것은 정말로 당신의 문제를 많이 도울 것이라고 생각하지 않아. –