浅谈JavaScript的Touch事件
1. Touch事件简介
Touch事件是一种用于移动设备的事件类型,它可以识别用户在触摸屏幕上的手势以及其它动作。
在JavaScript中,Touch事件与普通的事件有些不同。例如,Touch事件可以同时识别多指手势,同时也有一些自己独特的属性和方法。
2. Touch事件分类
一般来说,Touch事件可以分为以下几类:
- touchstart:手指触摸屏幕时触发的事件。
- touchmove:手指在屏幕上滑动时触发的事件。
- touchend:手指从屏幕上抬起时触发的事件。
- touchcancel:触摸事件被系统取消时触发的事件。
3. Touch事件使用方法
要使用Touch事件,需要先将事件绑定到相应的元素上。例如:
var element = document.getElementById('myElement');
element.addEventListener('touchstart', touchStartHandler);
element.addEventListener('touchmove', touchMoveHandler);
element.addEventListener('touchend', touchEndHandler);
element.addEventListener('touchcancel', touchCancelHandler);
其中,touchStartHandler、touchMoveHandler、touchEndHandler和touchCancelHandler是处理Touch事件的回调函数。
在回调函数中,可以访问Touch事件的一些属性和方法。以下是一些常用的属性和方法:
- touches:一个TouchList对象,包含当前所有触摸点的信息。
- targetTouches:一个TouchList对象,包含当前在目标元素上的所有触摸点的信息。
- changedTouches:一个TouchList对象,包含最近一次触摸事件的所有触摸点的信息。
- preventDefault():阻止浏览器默认行为。
- stopPropagation():阻止事件冒泡。
4. Touch事件示例
4.1 拖曳元素
以下是一个拖曳元素的示例,代码中使用了touchStartHandler、touchMoveHandler和touchEndHandler三个回调函数:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Drag Element</title>
<style>
#dragMe {
position: absolute;
left: 50px;
top: 50px;
width: 100px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<div id="dragMe"></div>
<script>
var offsetX, offsetY;
function touchStartHandler(event) {
var touch = event.changedTouches[0];
offsetX = touch.pageX - parseInt(dragMe.style.left);
offsetY = touch.pageY - parseInt(dragMe.style.top);
}
function touchMoveHandler(event) {
var touch = event.changedTouches[0];
dragMe.style.left = touch.pageX - offsetX + 'px';
dragMe.style.top = touch.pageY - offsetY + 'px';
}
function touchEndHandler(event) {
// do nothing
}
var dragMe = document.getElementById('dragMe');
dragMe.addEventListener('touchstart', touchStartHandler);
dragMe.addEventListener('touchmove', touchMoveHandler);
dragMe.addEventListener('touchend', touchEndHandler);
dragMe.addEventListener('touchcancel', touchEndHandler);
</script>
</body>
</html>
在这个示例中,我们使用了offsetX和offsetY两个变量来记录用户滑动的偏移量,然后在touchMoveHandler中使用这个偏移量来计算元素的新位置。
4.2 缩放元素
以下是一个缩放元素的示例,代码中使用了touchStartHandler、touchMoveHandler和touchEndHandler三个回调函数:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Scale Element</title>
<style>
#scaleMe {
position: absolute;
left: 50px;
top: 50px;
width: 100px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<div id="scaleMe"></div>
<script>
var startX, startY, startWidth, startHeight;
function touchStartHandler(event) {
var touches = event.touches;
if (touches.length == 2) {
var touch1 = touches[0];
var touch2 = touches[1];
startX = (touch1.pageX + touch2.pageX) / 2;
startY = (touch1.pageY + touch2.pageY) / 2;
startWidth = parseInt(scaleMe.offsetWidth);
startHeight = parseInt(scaleMe.offsetHeight);
}
}
function touchMoveHandler(event) {
var touches = event.touches;
if (touches.length == 2) {
var touch1 = touches[0];
var touch2 = touches[1];
var endX = (touch1.pageX + touch2.pageX) / 2;
var endY = (touch1.pageY + touch2.pageY) / 2;
var dx = endX - startX;
var dy = endY - startY;
var distance = Math.sqrt(dx*dx + dy*dy);
var scale = distance / 100;
var newWidth = startWidth * scale;
var newHeight = startHeight * scale;
scaleMe.style.width = newWidth + 'px';
scaleMe.style.height = newHeight + 'px';
}
}
function touchEndHandler(event) {
// do nothing
}
var scaleMe = document.getElementById('scaleMe');
scaleMe.addEventListener('touchstart', touchStartHandler);
scaleMe.addEventListener('touchmove', touchMoveHandler);
scaleMe.addEventListener('touchend', touchEndHandler);
scaleMe.addEventListener('touchcancel', touchEndHandler);
</script>
</body>
</html>
在这个示例中,我们使用了startX、startY、startWidth和startHeight四个变量来记录用户的手指位置和元素的尺寸,然后在touchMoveHandler中计算用户手指的距离和缩放比例,最后调整元素的尺寸。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈javascript的Touch事件 - Python技术站