一段touch代码在使用bind之后所犯的错误
2011-11-14 11:56 呦菜 阅读(596) 评论(0) 编辑 收藏 举报这段代码的主要功能是在Android手机上触屏之后会产生一个红色的小区域,然后能根据手指进行拖拽,源代码在touch事件的小例子一文中,原来是addEventListener方法,后来因为需要使用bind,所以在修改过程中出现了诸多问题,以下是正确代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>jQuery Mobile Web 应用程序</title> <!--<link href="jquery-mobile/jquery.mobile-1.0a3.min.css" rel="stylesheet" type="text/css"/>--> <script src="jquery-mobile/jquery-1.5.min.js" type="text/javascript"></script> <!--<script src="jquery-mobile/jquery.mobile-1.0a3.min.js" type="text/javascript"></script>--> <!-- 只要将当前站点配置为移动应用程序,则对 phonegap.js 的该引用将允许代码提示。 要将该站点配置为移动应用程序,请转至“站点”->“移动应用程序”->“配置应用程序框架...”--> <script src="/phonegap.js" type="text/javascript"></script> <style type="text/css"> .spirit { /* 方块的class名称*/ position: absolute; width: 50px; height: 50px; background-color: red; } </style> </head> <body style="margin:0;padding:0;"> <div> <div id="canvas" style="width:100%; border:1px solid #F00;">sssssssssssss</div> <div id="value"></div> </div> </body> <script type="text/javascript"> // define global variable var canvas = $("#canvas"),spirit, startX, startY; // touch start listener function touchStart(event) { //alert(event.type); event.preventDefault(); event=event.originalEvent||event; //alert(event.touches.length); if (spirit ||! event.touches.length) return; var touch = event.touches[0]||event.changedTouches[0]; startX = touch.pageX; startY = touch.pageY; spirit = document.createElement("div"); spirit.className ="spirit"; spirit.style.left = startX; spirit.style.top = startY; canvas.append(spirit); } // add touch start listener canvas.bind("touchstart", touchStart); function touchMove(event) { event.preventDefault(); event=event.originalEvent||event; if (!spirit ||!event.touches.length) return; var touch = event.touches[0]||event.changedTouches[0]; x = touch.pageX-startX, y = touch.pageY-startY; spirit.style.webkitTransform ='translate('+ x +'px, '+ y +'px)'; } canvas.bind("touchmove", touchMove); function touchEnd(event) { event.preventDefault(); event=event.originalEvent||event; if(!spirit) return; // canvas.remove(spirit); $(".spirit").remove(); spirit =null; } canvas.bind("touchend", touchEnd); </script> </html>
对于这段代码在写的过程中犯了以下几个错误:
1. 我刚开始写获取canvas是用document.getElementById方法,却忘了bind是jquery的方法,这为其一
2. 缺少event=event.originalEvent||event;这一句,使得touch事件无法获取。应该将event改为原生的event事件
总之是对jquery与原生js方法的不熟悉导致的代码错误,以后需要改正