js实现滑动触屏事件监听的方法


Posted in Javascript onMay 05, 2015

本文实例讲述了js实现滑动触屏事件监听的方法。分享给大家供大家参考。具体实现方法如下:

function span_move_fun(){
 var span = document.getElementById("move_k");
 var span_left = $(span).offset().left;
 var span_top = $(span).offset().top;
 var start_left = $(span).offset().left;
 var start_top = $(span).offset().top;
 span.addEventListener('touchstart', function(event) {
 event.preventDefault();
 if (event.targetTouches.length == 1) {
   var touch = event.targetTouches[0];
   span.style.position = "absolute";
 span_top = $(this).offset().top;
 span_left = $(this).offset().left;
 start_top = touch.pageY
 start_left = touch.pageX
   var left = parseFloat(touch.pageX - start_left + span_left-30);
   var top = parseFloat(touch.pageY - start_top + span_top-73);
 span.style.left = String(left) + 'px';
 span.style.top = String(top) + 'px';
   }
  });
  span.addEventListener('touchmove', function(event) {
 event.preventDefault();
 if (event.targetTouches.length == 1) {
 var touch = event.targetTouches[0];
 span.style.position = "absolute";
 var left = parseFloat(touch.pageX - start_left + span_left-30);
   var top = parseFloat(touch.pageY - start_top + span_top-73);
 span.style.left = String(left) + 'px';
 span.style.top = String(top) + 'px';
 }
 });
  span.addEventListener('touchend', function(event) {
  var touch = event.changedTouches[0];
  if(parseFloat(touch.pageX - start_left + span_left-30) <= -5 || parseFloat(touch.pageX - start_left + span_left-30) >= 620 || parseFloat(touch.pageY - start_top + span_top-73) <= -38 || parseFloat(touch.pageY - start_top + span_top-73) >= 587){
  span.style.left = String(span_left-30) + 'px';
 span.style.top = String(span_top-73) + 'px';
  }
 event.stopPropagation();
 });
}

js的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend。这三个事件最重要的属性是 pageX和 pageY,表示X,Y坐标。

touchstart在触摸开始时触发事件

touchend在触摸结束时触发事件

touchmove这个事件比较奇怪,按道理在触摸到过程中不断激发这个事件才对,但是在我的 Android 1.5 中,在 touchstart 激发后激发一次,然后剩余的都和 touchend 差不多同时激发。

这三个事件都都有一个 timeStamp 的属性,查看 timeStamp 属性,可以看到顺序是 touchstart -> touchmove ->touchmove -> … -> touchmove ->touchend。

下面是一段代码实例:

document.getElementsByTagName_r('body')[0].addEventListener('touchstart',function(e){
  nStartY = e.targetTouches[0].pageY;
  nStartX = e.targetTouches[0].pageX;
});
document.getElementsByTagName_r('body')[0].addEventListener('touchend',function(e){
  nChangY = e.changedTouches[0].pageY;
  nChangX = e.changedTouches[0].pageX;
});

PS:
1. touch事件跟click事件是不会被同时触发的。现在的移动设备做的比较好,已经把这个问题完美的避免掉了。

2. 注意触摸的开始和结束位置的位移大小。如果位移小过小应该不做任何动作。

PS:这里再为大家提供一个关于JS事件的在线工具,归纳总结了JS常用的事件类型与函数功能:

javascript事件与功能说明大全:

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
使用js正则控制input标签只允许输入的值
Jul 29 Javascript
html+js实现动态显示本地时间
Sep 21 Javascript
JavaScript实现的购物车效果可以运用在好多地方
May 09 Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 Javascript
Angular的MVC和作用域
Dec 26 Javascript
Express + Session 实现登录验证功能
Sep 08 Javascript
浅谈Angular文字折叠展开组件的原理分析
Nov 24 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
Sep 14 Javascript
Vue常用的几个指令附完整案例
Nov 06 Javascript
JavaScript设计模式之责任链模式实例分析
Jan 16 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 Javascript
微信小程序之高德地图多点路线规划过程示例详解
Jan 18 Javascript
JS根据生日算年龄的方法
May 05 #Javascript
js改变Iframe中Src的方法
May 05 #Javascript
js网页滚动条滚动事件实例分析
May 05 #Javascript
jquery判断单选按钮radio是否选中的方法
May 05 #Javascript
JQuery中Bind()事件用法分析
May 05 #Javascript
JS判断字符串包含的方法
May 05 #Javascript
JS实用的动画弹出层效果实例
May 05 #Javascript
You might like
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
php创建sprite
2014/02/11 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
python optparse模块使用实例
2015/04/09 Python
python黑魔法之编码转换
2016/01/25 Python
Python实现视频下载功能
2017/03/14 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
十佳教师事迹材料
2014/01/11 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
销售会议开幕词
2015/01/28 职场文书
感动中国何玥观后感
2015/06/02 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js