移动端开发touchstart,touchmove,touchend事件详解和项目

  最近在做移动端的开发,在一个“服务商管理”页面使用到了触摸事件"touchstart","touchmove","touchend"。需求:当你手指接触到屏幕并向左滑动时,被滑动的服务商信息开始向左滑动同时出现"编辑"和"停用"操作按钮。若继续用手指向右滑动,那么就会隐藏"编辑"和"停用"按钮,回到一开始的正常状态。下图展示了向左滑动和向右滑动产生的效果。

  从一开始到左滑动完成:

              

  从左滑动完成开始向右滑动知道完成。

                

  触摸事件(touch Events)

    touchstart,touchmove,touchend事件都有13个事件属性,具体可以参考MDN上的解释(在打开的MDN网页上,快捷键ctrl+F,输入touchstart即可找到触摸事件列表),我就对我们经常需要使用的几个事件属性进行解释。

    target属性: 触发事件的DOM元素。  type属性: 事件类型。  bubbles属性: 是否冒泡。  cancelable属性: 是否阻止浏览器的默认行为。

    重点说明touches, targetTouches, changedTouches这三个事件属性,这三个都是touchList类型,touches事件属性:触摸当前接触面的每一个触点列表。targetTouches属性:接触点的每一个接触点的列表,并在当前事件的目标元素上启动。changedTouches属性:每一个接触点的清单,这有助于事件。在控制台输出这三个事件属性:

 /*  这三个都是toucheList类型   输出的内容也是一样的  */
console.log(e.touches);
console.log(e.targetTouches);
console.log(e.changedTouches);

     如右图,我们需要的内容在Touch对象中 。                                                     同时也在控制台输出Ttouch的值:

// 我们发现这三者的值仍然一样
console.log(e.touches[0]);
console.log(e.targetTouches[0]);
console.log(e.changedTouches[0]);

    好吧,三者的值还是一样  我们展开其中的一个看清里面的全部 :

    里面的内容我们大部分我们都认识,clientX:触摸目标在视口中的x坐标。clientY:触摸目标在视口中的y坐标。identifier:标识触摸的唯一ID。pageX:触摸目标在页面中的x坐标。pageY:触摸目标在页面中的y坐标。screnX:触摸目标在屏幕中的x左边。screenY:触摸目标在屏幕中的y左边。target:触摸目标的DOM节点目标。

  项目应用

    下面我就讲讲在项目中的应用和一些思路。首先给需要的滚动的元素添加样式:

 .slipBox {
/* 若初始不设置为0,滑动会有卡顿现象 */
transform: translateX(0rem);
/* 添加动画 */
transition: all 0.3s;
}

    先写好一个样式,后面会用上。

 /*   左移动2.28rem   */
.scrollLeft {
-webkit-transform: translateX(-2.28rem);
-moz-transform: translateX(-2.28rem);
-ms-transform: translateX(-2.28rem);
transform: translateX(-2.28rem);
}

    JS代码如下:

 /*  添加事件    */
for(var i = 0; i < $(".merchant > li").length; i++) {
$(".merchant > li")[i].addEventListener('touchstart', touchStart); //触摸开始
$(".merchant > li")[i].addEventListener('touchmove', touchMove); //触摸移动
$(".merchant > li")[i].addEventListener('touchend', function() { //触摸结束
isMove = false;
});
}
//滑动开始
function touchStart(e) {
isMove = true;
startX = e.touches[0].clientX; //触摸起始X位置
}
//滑动时添加样式
function touchMove(e) {
if(isMove) {
var moveX = e.touches[0].clientX - startX;//触摸滑动距离
if(moveX < -25) { //向左滑动
e.preventDefault(); //浏览器不要执行与事件关联的默认动作
//清除其他元素的类名,被滑动的元素添加scrollLeft类名
} else if(moveX > 25) { //向右滑动
e.preventDefault(); //浏览器不要执行与事件关联的默认动作
//被滑动的滑动的元素清除scrollLeft类名
}
}
}

    这样效果就实现了,感兴趣的赶紧在手机上跑起来吧。

  最后

    注意几点:①禁止缩放:缺省的多点触摸设置不是特别的好用,因为你的滑动和手势往往与浏览器的行为有关联,比如说滚动和缩放。要禁用缩放功能的话,使用下面的元标记设置你的视图区(viewport),这样其对于用户来说就是不可伸缩的了:content="width=device-width, initial-scale=1.0, user-scalable=no"> 。②禁止滚动:一些移动设备有缺省的touchmove行为,比如说经典的iOS overscroll效果,当滚动超出了内容的界限时就引发视图反弹。这种做法在许多多点触控应用中会带来混乱,但要禁用它很容易。

document.body.addEventListener('touchmove', function(event) {
    event.preventDefault();
}, false);

③因为是在移动设备做开发,所以要留心移动的最佳实践,可以看这W3C文档。另外我也参考这篇博主的一些内容,学习到了很多。到此该介绍的也介绍完了。

    

移动端开发touchstart,touchmove,touchend事件详解和项目的更多相关文章

  1. 移动端的touchstart,touchmove,touchend事件中的获取当前touch位置

    前提:touchstart,touchmove,touchend这三个事件可以通过原生和jq绑定. 原生:document.querySelector("#aa").addEven ...

  2. 手机端touchstart,touchmove,touchend事件,优化用户划入某个可以点击LI的效果

    在我们滑动手机的时候,如果LI或者DIV标签可以点击,那么在移动端给用户一个效果 /*id为添加效果LI上的UL的ID,或者是当前DIV的ID*/ function doTouchPublic(id) ...

  3. touchstart,touchmove,touchend事件 写法

    jQuery写法: $('#id').on('touchstart',function(e) { var _touch = e.originalEvent.targetTouches[0]; var ...

  4. 移动端click时间、touch事件、tap事件详解

    一.click 和 tap 比较 两者都会在点击时触发,但是在手机WEB端,click会有 200~300 ms,所以请用tap代替click作为点击事件. singleTap和doubleTap 分 ...

  5. touchstart和touchend事件

    touchstart和touchend事件 移动互联网是未来的发展趋势,现在国内很多互联网大佬都在争取移动这一块大饼,如微信及支付宝是目前比较成功的例子,当然还有各种APP和web运用. 由于公司的需 ...

  6. 获取touchstart,touchmove,touchend 坐标

    简单说下如何用jQuery 和 js原生代码获取touchstart,touchmove,touchend 坐标值: jQuery 代码: $('#id').on('touchstart',funct ...

  7. JavaScript事件详解-Zepto的事件实现(二)【新增fastclick阅读笔记】

    正文 作者打字速度实在不咋地,源码部分就用图片代替了,都是截图,本文讲解的Zepto版本是1.2.0,在该版本中的event模块与1.1.6基本一致.此文的fastclick理解上在看过博客园各个大神 ...

  8. JavaScript事件详解-zepto的事件实现

    zepto的event 可以结合上一篇JavaScript事件详解-原生事件基础(一)综合考虑源码暂且不表,github里还有中文网站都能下到最新版的zepto.整个event模块不长,274行,我们 ...

  9. 第三天:JS事件详解-事件流

    学习来源: F:\新建文件夹 (2)\HTML5开发\HTML5开发\04.JavaScript基础\6.JavaScript事件详解 学习内容:  1)基础概念 2)举例说明: 代码如上,如果用事件 ...

随机推荐

  1. android GUI 流程记录

    ViewRootImpl 与 wms ViewRootImple里的 WindowSeesion是WindowManagerService的proxy, 通过这个句柄来调用WMS的功能而W是 wms用 ...

  2. [React Native]升级React Native版本

    React Native正式版本还没发布,但是小版本基本上每个月都更新1-2次.9月11号又更新了0.33版本,其中有两个增强功能正好是项目中用到的. 添加Android6.0权限验证API Add ...

  3. 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    题意:求$\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$. 开始开心(自闭)化简: $\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$ =$\su ...

  4. poj1087&&hdu1526 最大流

    多源多汇. 比较明显的建图.对于电器,可以从源点与各个电器相连,容量为1,表示这个电器有1个,然后对于各种接头,那可以各个接头与汇点相连,容量为1,表示每个接头只能用一次. 然后对于能够相互转换的接头 ...

  5. thinkphp5.0 使用action()报Cannot redeclare app\home\controller\CheckSubstrs()错误

    原因:Common公共类方法isMobile()内部定义了函数CheckSubstrs(),在使用action()时,会调用两次isMobile(),导致函数CheckSubstrs()重复定义 解决 ...

  6. MaxCompute客户端(odpscmd)在windows命令行下查询中文乱码问题处理实践

    MaxCompute客户端工具是阿里云大数据计算服务MaxCompue产品官方客户端工具,通过客户端工具可以连接MaxCompute项目,完成包括数据管理.数据上下传.作业执行.用户及授权管理等各项操 ...

  7. I/O模型: 阻塞、非阻塞、I/O复用、同步、异步

    I/O模型不论在实际使用还是准备笔试面试中都是重要的内容,参考Unix网络编程进行总结如下.(尤其注意红色标注处) 1. 明确I/O考察的对象和流程 参考Unix网络编程,一个输入操作通常包括两个不同 ...

  8. CPU核数和线程数查找

    方法1: 方法2:

  9. UVa 679 【思维题】

    UVA 679 紫书P148例题. 题目大意:小球从一棵所有叶子深度相同的二叉树的顶点开始向下落,树开始所有节点都为0.若小球落到节点为0的则往左落,否则向右落.并且小球会改变它经过的节点,0变1,1 ...

  10. 最短路-SPAF模板

    以hdu1874畅通工程续为例 #include<iostream> #include<cstring> #include<cstdio> #include< ...