js 手机端触发事事件、javascript手机端/移动端触发事件

 

处理Touch事件能让你跟踪用户的每一根手指的位置。你可以绑定以下四种Touch事件:

1
2
3
4
touchstart:  // 手指放到屏幕上的时候触发 
touchmove:  // 手指在屏幕上移动的时候触发 
touchend:  // 手指从屏幕上拿起的时候触发 
touchcancel:  // 系统取消touch事件的时候触发。至于系统什么时候会取消,不详
1
2
3
4
client / clientY:// 触摸点相对于浏览器窗口viewport的位置 
pageX / pageY:// 触摸点相对于页面的位置 
screenX /screenY:// 触摸点相对于屏幕的位置 
identifier: // touch对象的unique ID

http://blog.sina.com.cn/s/blog_65c2ec5e0101fexw.html

处理Touch事件能让你跟踪用户的每一根手指的位置。你可以绑定以下四种Touch事件:
    1.touchstart:  // 手指放到屏幕上的时候触发 
    2.touchmove:  // 手指在屏幕上移动的时候触发 
    3.touchend:  // 手指从屏幕上拿起的时候触发 
    4touchcancel:  // 系统取消touch事件的时候触发。至于系统什么时候会取消,不详
属性
    1.client / clientY:// 触摸点相对于浏览器窗口viewport的位置 
    2.pageX / pageY:// 触摸点相对于页面的位置 
    3.screenX /screenY:// 触摸点相对于屏幕的位置 
    4.identifier: // touch对象的unique ID 
//touchstart事件  
function touchSatrtFunc(e) {  
    //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
    var touch = e.touches[0]; //获取第一个触点  
    var x = Number(touch.pageX); //页面触点X坐标  
    var y = Number(touch.pageY); //页面触点Y坐标  
    //记录触点初始位置  
    startX = x;  
    startY = y;  
}  
//touchmove事件 
function touchMoveFunc(e) {  
    //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
    var touch = evt.touches[0]; //获取第一个触点  
    var x = Number(touch.pageX); //页面触点X坐标  
    var y = Number(touch.pageY); //页面触点Y坐标  
    var text = 'TouchMove事件触发:(' + x + ', ' + y + ')';  
    //判断滑动方向  
    if (x - startX != 0) {  
        //左右滑动  
    }  
    if (y - startY != 0) {  
        //上下滑动  
    }  
}  
 
 

手机端html5触屏事件(touch事件)

 

touchstart:触摸开始的时候触发

touchmove:手指在屏幕上滑动的时候触发

touchend:触摸结束的时候触发

而每个触摸事件都包括了三个触摸列表,每个列表里包含了对应的一系列触摸点(用来实现多点触控):

touches:当前位于屏幕上的所有手指的列表。

targetTouches:位于当前DOM元素上手指的列表。

changedTouches:涉及当前事件手指的列表。

每个触摸点由包含了如下触摸信息(常用):

identifier:一个数值,唯一标识触摸会话(touch session)中的当前手指。一般为从0开始的流水号(android4.1,uc)

target:DOM元素,是动作所针对的目标。

pageX/pageX/clientX/clientY/screenX/screenY:一个数值,动作在屏幕上发生的位置(page包含滚动距离,client不包含滚动距离,screen则以屏幕为基准)。 

radiusX/radiusY/rotationAngle:画出大约相当于手指形状的椭圆形,分别为椭圆形的两个半径和旋转角度。初步测试浏览器不支持,好在功能不常用,欢迎大家反馈。

 

var
 obj = document.getElementByIdx_x('id');

obj.addEventListener(
'touchmove'function(event) {

     
// 如果这个元素的位置内只有一个手指的话

    
if (event.targetTouches.length == 1) {

     event.preventDefault();
// 阻止浏览器默认事件,重要 

        
var touch = event.targetTouches[0];

        
// 把元素放在手指所在的位置

        
obj.style.left = touch.pageX-50 + 'px';

        
obj.style.top = touch.pageY-50 + 'px';

        
}

}, 
false);

/*!*****************

  1. @author:meibin
  2. @date:2014-04-03
  3. @功能:移动滑动事件js方法封装
  4. 说明:该方法为考虑使用的灵活性,并未直接封装成插件,只简单的提供了操作事件;
  5. 暂支持:swipeleft 、 swiperight、swipeup 、swipedown 、singleTap、touchstart、touchmove、touchend;等事件;
  6. 左滑动    、  右滑动    、 上滑动  、 下滑动    、  点击    、 触摸开始  、 触摸移动 、触摸结束
  7. ******************/
  8. //手机触屏事件封装;
  9. var TouchEvent = (function(){
  10. return {
  11. touches:function(obj,oEvent,fnd){
  12. /*
  13. 参数说明:
  14. obj   当前的对象;
  15. oEvent  swipeleft 、 swiperight、swipeup 、swipedown 、singleTap、touchstart、touchmove、touchend
  16. fnd 回调函数;
  17. */
  18. var defaults = {
  19. x  : 2,   //默认滑动范围 X 不能小于5;
  20. y  : 2,   //默认滑动范围 Y 不能小于5;
  21. ox : 0,   //默认的开始 x 轴的值;
  22. oy : 0,   //默认的开始 y 轴的值;
  23. nx : 0,   //默认的结束 x 轴的值;
  24. ny : 0    //默认的结束 y 轴的值;
  25. };
  26. oEvent                         = oEvent.toLowerCase(); // 大小写转换;可以减少报错率;
  27. var isTouchPad  = (/hp-tablet/gi).test(navigator.appVersion);
  28. var hasTouch         = 'ontouchstart' in window && !isTouchPad;
  29. var touchStart  = hasTouch ? 'touchstart' : 'mousedown';
  30. var touchMove   = hasTouch ? 'touchmove' : '';
  31. var touchEnd    = hasTouch ? 'touchend' : 'mouseup';
  32. var scrollY; //用于检测页面是否是滑动或滚动条滚动;
  33. //var scrollX;
  34. var a = {
  35. /*触摸开始方法*/
  36. tStartFun:function(e){
  37. //e.preventDefault();
  38. scrollY= undefined;
  39. //scrollX= undefined;
  40. defaults.ox = e.targetTouches[0].pageX; //手势开始时的X轴位置;
  41. defaults.oy = e.targetTouches[0].pageY; //手势开始时的Y轴位置;
  42. defaults.nx = defaults.ox;
  43. defaults.ny = defaults.oy;
  44. if(oEvent.indexOf("touchstart") != -1){ //如果是绑定的这个事件;
  45. fnd();        //执行回调函数;
  46. };
  47. /*添加 “移动” 事件监听;*/
  48. obj.addEventListener(touchMove,a.tMoveFun,false);
  49. /*添加 “结束” 事件监听;*/
  50. obj.addEventListener(touchEnd,a.tEndFun,false);
  51. },
  52. /*触摸移动方法*/
  53. tMoveFun:function(e){
  54. //if( hasTouch ){ if (
    e.targetTouches.length > 1 || e.scale && e.scale !== 1)
    return };
  55. //e.preventDefault();
  56. //oStop = true;
  57. //多点或缩放
  58. defaults.nx = e.targetTouches[0].pageX; //手势移动时的X轴位置,即最后的值等于手指;
  59. defaults.ny = e.targetTouches[0].pageY; //手势移动时的Y轴位置;
  60. var changeY = defaults.oy - defaults.ny; //手指抬起时 Y 轴的最后值 || (开始时的值 - 移动时的值);
  61. var changeX = defaults.ox - defaults.nx; //手指抬起时 X 轴的最后值 || (开始时的值 - 移动时的值);
  62. if ( typeof scrollY == 'undefined' ) {//|| (typeof scrollX == 'undefined')
  63. scrollY = !!( scrollY || Math.abs(changeX ) < Math.abs(changeY) );
  64. //scrollX = !!( scrollX || Math.abs(changeY ) < Math.abs(changeX) );
  65. }
  66. if( !scrollY ){ //当确定页面不是滚动时,才阻止浏览器默认事件;|| !scrollX
  67. e.preventDefault(); //当确定页面不是滚动时,才阻止浏览器默认事件;
  68. if(oEvent.indexOf("touchmove") != -1){//如果是绑定的这个事件;
  69. fnd(); //执行回调函数;
  70. }
  71. }
  72. },
  73. /*触摸结束的方法*/
  74. tEndFun:function(e){
  75. var changeY = defaults.oy - defaults.ny; //手指抬起时 Y 轴的最后值 || (开始时的值 - 移动时的值);
  76. var changeX = defaults.ox - defaults.nx; //手指抬起时 X 轴的最后值 || (开始时的值 - 移动时的值);
  77. //如果 最后的X 轴值 大于 Y轴的值 并且 Y轴的值 大于 y= 5 就开始判断事件
  78. // 因为默认如果移动的范围小于 5*5 就当做点击事件处理;
  79. if(Math.abs(changeX)
    > Math.abs(changeY) && Math.abs(changeY) > defaults.y){
  80. //左右事件;
  81. if(changeX > 0){ // 如果 X 轴 的值大于 0 说明用于有移动;就进行事件判断,判断用户绑定的是什么事件;;
  82. if(oEvent.indexOf("swipeleft") != -1){ // 如果绑定的是 向左滑动事件,即执行向左的回调函数;
  83. fnd();//执行回调函数;
  84. }
  85. }else{
  86. if(oEvent.indexOf("swiperight") != -1){ // 如果绑定的是 向左滑动事件,即执行向左的回调函数;
  87. fnd();//执行回调函数;
  88. }
  89. }
  90. }else
    if(Math.abs(changeY) > Math.abs(changeX) && Math.abs(changeX)
    > defaults.x){
  91. //上下事件;
  92. if(changeY > 0){  // 如果 Y 轴 的值大于 0 说明用于有移动;就进行事件判断,判断用户绑定的是什么事件;;
  93. if(oEvent.indexOf("swipeup") != -1){// 向上滑动事件,即执行向上的回调函数;
  94. fnd();
  95. }
  96. }else{
  97. if(oEvent.indexOf("swipedown") != -1) { // 向下滑动事件,即执行向下的回调函数;
  98. fnd();
  99. }
  100. }
  101. }else{
  102. //点击事件;即用户滑动的范围小于默认的5*5
  103. if(oEvent.indexOf("singletap") != -1){ //点击事件
  104. fnd();
  105. }
  106. }
  107. //如果绑定的是 结束 事件;
  108. if(oEvent.indexOf("touchend") != -1){
  109. fnd();
  110. }
  111. /*事件结束时,删除相应的监听事件;*/
  112. obj.removeEventListener(touchMove,a.tMoveFun,false);
  113. obj.removeEventListener(touchEnd,a.tEndFun,false);
  114. }
  115. }
  116. //添加 “开始” 事件监听;
  117. obj.addEventListener(touchStart,a.tStartFun,false);
  118. }
  119. };//return END;
  120. })();

使用示例:
                        var tempWrapId = document.getElementById('mMain');
                        //向左滑动的事件;
                        TouchEvent.touches(tempWrapId,'swipeLeft',function(event){

if(oStop){
                                       
                                        oStop = false;
                                        i++;
                                        if(i>(max-1)){

i = max-1;
                                                oStop = true;
                                                return false;

}
                                       
                                        $('.m-main .m-item').find('.btn-slide').css('opacity',0);
                                        $('#bodyWrap .m-main').animate({'top':-(i*itemH)},400);
                                        $('.m-main .m-item').eq(i).find('.btn-slide').css('opacity',1);
                                        oStop = true;
                                }
                                
                        });

 
 

手机触摸屏的JS事件

 
处理Touch事件能让你跟踪用户的每一根手指的位置。你可以绑定以下四种Touch事件:
    1.touchstart:  // 手指放到屏幕上的时候触发 
    2.touchmove:  // 手指在屏幕上移动的时候触发 
    3.touchend:  // 手指从屏幕上拿起的时候触发 
    4touchcancel:  // 系统取消touch事件的时候触发。至于系统什么时候会取消,不详
属性
    1.client / clientY:// 触摸点相对于浏览器窗口viewport的位置 
    2.pageX / pageY:// 触摸点相对于页面的位置 
    3.screenX /screenY:// 触摸点相对于屏幕的位置 
    4.identifier: // touch对象的unique ID 
 
//touchstart事件  
function touchSatrtFunc(e) {  
    //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
    var touch = e.touches[0]; //获取第一个触点  
    var x = Number(touch.pageX); //页面触点X坐标  
    var y = Number(touch.pageY); //页面触点Y坐标  
    //记录触点初始位置  
    startX = x;  
    startY = y;  
}  
//touchmove事件 
function touchMoveFunc(e) {  
    //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
    var touch = evt.touches[0]; //获取第一个触点  
    var x = Number(touch.pageX); //页面触点X坐标  
    var y = Number(touch.pageY); //页面触点Y坐标  
    var text = 'TouchMove事件触发:(' + x + ', ' + y + ')';  
    //判断滑动方向  
    if (x - startX != 0) {  
        //左右滑动  
    }  
    if (y - startY != 0) {  
        //上下滑动  
    }  
}  
 
 
 

让bootstrap默认slider支持触屏设备

var isTouch=('ontouchstart' in window);
if(isTouch){
$(".carousel").on('touchstart', function(e){
var that=$(this);
var touch = e.originalEvent.changedTouches[0];
var startX = touch.pageX;
var startY = touch.pageY;
$(document).on('touchmove',function(e){
touch = e.originalEvent.touches[0] ||e.originalEvent.changedTouches[0];
var endX=touch.pageX - startX;
var endY=touch.pageY - startY;
if(Math.abs(endY)<Math.abs(endX)){
if(endX > 10){
$(this).off('touchmove');
that.carousel('prev');
}else if (endX < -10){
$(this).off('touchmove');
that.carousel('next');
}
return false;
}
});
});
$(document).on('touchend',function(){
$(this).off('touchmove');
});
}

js触摸屏案例的更多相关文章

  1. 【Vue.js实战案例】- Vue.js递归组件实现组织架构树和选人功能

    大家好!先上图看看本次案例的整体效果. 浪奔,浪流,万里涛涛江水永不休.如果在jq时代来实这个功能简直有些噩梦了,但是自从前端思想发展到现在的以MVVM为主流的大背景下,来实现一个这样繁杂的功能简直不 ...

  2. js计算器案例

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>j ...

  3. 正則表達式--js使用案例

    前言:在前端页面使用中.遇到日期格式的验证.開始使用了一款表单控件验证.可是不兼容!!并且使用起来还受到非常大约束.所以就决定自己写原生js. 为了完毕日期格式的验证.第一步,当然是学会使用正則表達式 ...

  4. JS小案例:循环间隔重复变色

    在A.B.C三个区块中,有且仅有一个红色,要求红色每隔一秒即进入下一个区块,变色过程不断循环往复. 参考代码: <!DOCTYPE html> <html lang="zh ...

  5. node.js(小案例)_实现学生信息增删改

    一.前言 本节内容主要对小案例做一个总结: 1.如何开始搭建小项目 2.路由设计 3.模块应用 4.项目源码以及实现过程github地址: 项目演示如下: 二.主要内容 1.项目的关键性js源码: 项 ...

  6. node.js小案例_留言板

    一.前言 通过这个案例复习: 1.node.js中模板引擎的使用 2.node.js中的页面跳转和重定向 二.主要内容 1.案列演示:  2.案列源码:https://github.com/45612 ...

  7. node.js 爬虫案例

    本案例是爬的一部小说,爬取并存在本地 使用了动态浏览器头部信息,和 动态ip代理, 这2个方式可以有效的伪装自己,不至于被反爬,然后拉黑,之前已有记录,浏览器头部信息,也记录的有, app.js im ...

  8. js DOM 案例

    模态框 <html> <head> <meta charset="UTF-8"> <title>模态框</title> ...

  9. C3.js入门案例

    C3.js是基于D3.js开发的JavaScript库,它可以让开发者构建出可复用的图表,并且还提供了一系列图表上的交互行为.通过C3,只需要往generate函数中传入数据对象就可以轻松的绘制出图表 ...

随机推荐

  1. 从决策树学习谈到贝叶斯分类算法、EM、HMM

    从决策树学习谈到贝叶斯分类算法.EM.HMM                (Machine Learning & Recommend Search交流新群:172114338) 引言 log ...

  2. unix系统非roo账号安装JDK

    AIX系统用户rusky(非root用户,没有权限修改/etc/profile和/etc/environment文件 )直接解压JDK.zip文件,解压后把JAVA目录拷贝到/home/rusky目录 ...

  3. 【计算几何初步-凸包-Graham扫描法-极角序】【HDU1348】 WALL

    Wall Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. 【贪心】【Uva11292】 勇者斗恶龙

    直接用白书上的翻译吧 例题1  勇者斗恶龙(The Dragon of Loowater, UVa 11292) 你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村里有m个骑士 ...

  5. 测试 windows live writer

    This is the first article written by the writer!   wenzhaoshanda

  6. linq读书笔记2-查询内存中的对象

    上次我们说到了linq对数组内容的检索,自.net2.0以后,泛型成了很常见的一种应用技术,linq对泛型的检索也提供了完善的支持 如对list类型的支持,范例如下: class Program    ...

  7. dojo.io.script

    dojo.io.script 定义: 跨域访问数据,可以动态的将script标签插入到网页当中. 局限: 1.只支持get方式访问: 2.只支持异步调用. 使用: 1.dojo.io.script.g ...

  8. Entity Framework排序

    public ActionResult Index() { using (ApplicationDbContext db = new ApplicationDbContext()) { //var l ...

  9. WdatePicker日历控件使用方法(转)

    转自:http://www.cnblogs.com/weixing/archive/2011/08/15/2139431.html WdatePicker日历控件使用方法   1. 跨无限级框架显示 ...

  10. python 数据类型之数值型

    1.在python在数值的类型大概包括int float complex decimal 1.int 在3.x中它不在有最大值的限制. 2.float它更加连近于C语言中的double 3.compl ...