基于JavaScript touch事件的自定义按钮示例

在开始本文之前,如果对JavaScript的touch事件不是很了解的话,请阅读下面这篇文章:

http://select.yeeyan.org/view/213582/202991

目前网上关于JavaScript touch事件的讲解文章比较少,而上文是我搜索结果中较好的一篇。而因为其版权声明中禁止转载,我也很遗憾地不能将其转载到我的博客。

 

言归正传,在移动web的开发中,原有html button往往在外观和性能上都无法达到预期的要求,特别是越来越火的移动web游戏中,自定义的按钮就显得越来越得心应手了。

如果你曾经开发过Android,当你看到JavaScript touch事件处理的时候就会发现,它和Java的事件监听实在是太像了。

下面的示例中,笔者实现了上下左右四个方向的自定义按钮的按下和释放状态的模拟。

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title></title>
<script type="text/javascript">
window.onload = function() {
         document.addEventListener("touchstart",touchStart, false);
         document.addEventListener("touchend",touchEnd, false);
}
 
function touchStart(event) {
         event.touches[0].target.src = "button/" + event.touches[0].target.id + "_pressed.png";
}
 
function touchEnd(event) {
         event.changedTouches[0].target.src = "button/" + event.changedTouches[0].target.id +"_default.png";
}
</script>
</head>
 
<body>
   <table>
       <tr>
           <td>
                <table>
                    <tr>
                        <td></td>
                        <td><img src="button/up_default.png" id="up" /></td>
                        <td></td>
                    </tr>
                    <tr>
                        <td><img src="button/left_default.png" id="left" /></td>
                        <td><img src="button/down_default.png" id="down" /></td>
                        <td><img src="button/right_default.png" id="right" /></td>
                    </tr>
                </table>
           </td>
       </tr>
   </table>
</div>
</body>
</html>

因为DOM对象本身并没有touch event,所以在编写处理事件的方法之前需要先用addEventListener()方法给DOM对象注册touch事件。

addEventListener()方法的原型如下:

target.addEventListener(type,listener, useCapture);

其中,target是目标DOM对象,如本例中的document,也可以是通过document.getElementById等方法获取到的元素;type是表示事件类型的字符串,如点击“click”、触屏开始“touchstart”等;listener是事件监听器,即处理事件的方法;useCapture是布尔值,用于指定事件流。

关于参数useCapture,可以参见下文:

http://blog.csdn.net/claram/article/details/6124422

 

本例中只使用了touchstart和touchend两个事件,分别表示手指触到DOM对象和离开DOM对象两个状态。实际上touch event共有三个事件,即前两者和touchmove(表示手指在屏幕上移动)。这三个事件的event参数都包含了touches、targetTouches和changedTouches三个保存手指状态的列表。但是实际上,在touchend事件中,touches列表为空,所以在获取手指离开屏幕时的状态时,用到的是changedTouches列表。

 

更多关于touch event的信息请参见本文开始的文章链接。在后续的博文中,笔者将尝试使用touchmove事件来模拟一个切水果的移动web程序。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值