[javascript] Hammer.js를 사용하여 확대/축소 가능한 이미지의 화면 이동을 제어하는 방법은?
먼저, Hammer.js 라이브러리를 HTML 파일에 추가합니다. 다음과 같은 링크 태그를 사용하여 추가할 수 있습니다.
<head>
...
<script src="https://hammerjs.github.io/dist/hammer.js"></script>
...
</head>
이제 JavaScript 코드를 사용하여 Hammer.js를 초기화하고 제스처를 감지할 요소를 설정합니다. 예를 들어, image
클래스를 가진 이미지 요소를 사용하겠습니다.
<body>
<img src="image.jpg" class="image" alt="확대/축소 가능한 이미지">
...
<script>
const imageElement = document.querySelector('.image');
const hammer = new Hammer(imageElement);
hammer.get('pan').set({ direction: Hammer.DIRECTION_ALL });
hammer.get('pinch').set({ enable: true });
let lastScale = 1;
let lastPosX = 0;
let lastPosY = 0;
let posX = 0;
let posY = 0;
let scale = 1;
let currentScale = 1;
hammer.on('panstart panmove', (e) => {
posX = lastPosX + e.deltaX;
posY = lastPosY + e.deltaY;
});
hammer.on('pinchstart pinchmove', (e) => {
scale = Math.max(1, Math.min(lastScale * e.scale, 10));
currentScale = scale / lastScale;
});
hammer.on('panend pancancel pinchend pinchcancel', () => {
lastScale = scale;
lastPosX = posX;
lastPosY = posY;
});
function transform() {
const transformValue = `scale(${scale}) translate(${posX}px, ${posY}px)`;
imageElement.style.transform = transformValue;
imageElement.style.webkitTransform = transformValue;
}
function resetTransform() {
posX = 0;
posY = 0;
scale = 1;
currentScale = 1;
transform();
}
// 초기 설정
transform();
// 리셋 버튼 클릭 시 초기 설정으로 복구
const resetButton = document.getElementById('reset-button');
resetButton.addEventListener('click', resetTransform);
</script>
</body>
위의 코드는 Hammer.js를 사용하여 확대 / 축소 가능한 이미지를 제어하는 방법을 보여줍니다. 이미지를 드래그하거나 핀치 제스처로 확대 / 축소 할 수 있습니다. 코드는 panning(start, move), pinching(start, move), 그리고 제스처가 끝났을 때 panning(end, cancel), pinching(end, cancel) 이벤트를 처리합니다. 이벤트 핸들러에서는 이미지의 위치와 크기를 계산하여 transform()
함수를 호출하여 이미지에 적용합니다. resetTransform()
함수는 리셋 버튼을 클릭하면 이미지를 초기 설정으로 복구합니다.
Hammer.js를 사용하여 확대 / 축소 가능한 이미지의 화면 이동을 제어하는 방법입니다. Hammer.js는 다양한 제스처를 다루는 강력한 라이브러리이므로 필요에 따라 다른 제스처도 사용할 수 있습니다. 공식 문서를 참조하여 사용 방법을 자세히 확인할 수 있습니다.