1. var myTouch = {
  2. /*
  3. * 给元素绑定tap事件 tap:轻拍、轻触
  4. * @param {object} el 绑定事件的元素
  5. * @param {function} callback 回调函数
  6. */
  7. tap:function(el,callback){
  8. // 1、end-start 时间差 < 150 2、不能滑动 不能触发touchmove
  9. if(typeof el === "object"){
  10. var startTime = 0, isMove = false;
  11. el.addEventListener("touchstart",function(){
  12. startTime = new Date();
  13. });
  14. el.addEventListener("touchmove",function(){
  15. isMove = true;
  16. });
  17. el.addEventListener("touchend",function(e){
  18. var endTime = new Date();
  19. if(endTime-startTime<150&&!isMove){
  20. callback&&callback(e)
  21. }
  22. isMove = false;
  23. startTime = 0;
  24. });
  25. }
  26. },
  27. /*
  28. * 给元素绑定滑动事件
  29. * @param {object} el 绑定事件的元素
  30. * @param {string} dir 滑动的方向 left|right|top|bottom
  31. * @param {function} callback 回调函数
  32. */
  33. swiper:function(el,dir,callback){
  34. if(typeof el === "object"){
  35. var p1 = null,p2 = null;
  36. el.addEventListener("touchstart",function(e){
  37. p1= {
  38. x:e.touches[0].clientX,
  39. y:e.touches[0].clientY
  40. }
  41. // 每 个 Touch 对象代表一个触点,可通过e.touches[0]获取;
  42. // 每个触点都由其位置,大小,形状,压力大小,和目标 element 描述。
  43. // TouchList 对象代表多个触点的一个列表.
  44. })
  45. el.addEventListener("touchmove",function(e){
  46. p2= {
  47. x:e.touches[0].clientX,
  48. y:e.touches[0].clientY
  49. }
  50. })
  51. el.addEventListener("touchend",function(e){
  52. if(p1&&p2&&dir===getDir()){
  53. }
  54. })
  55. function getDir(){ // 判断手指滑动的方向
  56. var dir = "";
  57. var diffx = p2.x - p1.x; // 两点的水平差值
  58. var diffy = p2.y - p1.y; // 两点的垂直差值
  59. var absx = Math.abs(diffx); //Math.abs()返回一个数的绝对值
  60. var absy = Math.abs(diffy);
  61. if(absx>30 || absy>30){
  62. if(absx>absy){
  63. // 水平滑动
  64. dir = diffx>0 ? "right" : "left";
  65. }else{
  66. // 垂直滑动
  67. dir = diffy>0 ? "bottom" : "top";
  68. }
  69. }
  70. return dir;
  71. }
  72. }
  73. }
  74. }

移动端开发中的一些坑:

_点击事件的第一个问题: _click 事件在移动端会有300ms的延迟响应 。不能及时响应,体验不好。