vue js判断长按触发及手指的上滑、下滑、左滑、又滑
<span class="btn" @touchstart="touchstart()" @touchmove="touchmove()" @touchend="touchend()">按住说话</span>
@touchstart: 触发按下事件
touchstart() {
event.preventDefault() //阻止默认事件(长按的时候出现复制)
this.startX = event.changedTouches[0].pageX
this.startY = event.changedTouches[0].pageY
}
@touchmove:触发移动事件,通过x轴y轴移动的距离判断是左滑又滑
touchmove() { // 如果手指有移动,则取消所有事件,此时说明用户只是要移动而不是长按
event.preventDefault()
var moveEndX = event.changedTouches[0].pageX
var moveEndY = event.changedTouches[0].pageY
var X = moveEndX - this.startX
var Y = moveEndY - this.startY
if (Math.abs(X) > Math.abs(Y) && X > 0) {
alert('left 2 right')
} else if (Math.abs(X) > Math.abs(Y) && X < 0) {
alert('right 2 left')
} else if (Math.abs(Y) > Math.abs(X) && Y > 0) {
alert('top 2 bottom')
} else if (Math.abs(Y) > Math.abs(X) && Y < 0) {
alert('bottom 2 top')
} else {
alert('just touch')
}
},
touchmove的最后坐标减去touchstart的起始坐标,X的结果如果正数,则说明手指是从左往右划动;X的结果如果负数,则说明手指是从右往左划动;Y的结果如果正数,则说明手指是从上往下划动;Y的结果如果负数,则说明手指是从下往上划动。
但是:
实际上手指在手机上面滑动时很难做到直上直下的滑动;只要稍微有点斜,就会被x轴的判断现行接管,而与我们的实际操作医院相背离。此时就需要添加特殊的判断技巧,代码如下:
@touchend:触发结束移动事件 通过事件判断是否是长按事件
touchend() { // 手释放,如果在500毫秒内就释放,则取消长按事件
event.preventDefault()
this.EndTime = new Date().getTime()
this.isRecord = false
if (this.EndTime - this.StarTime < 500) {
this.EndTime = 0
this.StarTime = 0
clearTimeout(this.timeOutEvent)// 清除定时器
alert('取消')
} else {
alert('松手')
wx.stopRecord({
success: function(res) {
alert('localId')
alert(res)
alert(JSON.stringify(res))
this.localId = res.localId
},
fail: function(res) {
alert(JSON.stringify(res))
}
})
}
参考文献:https://www.cnblogs.com/lijuntao/p/6479972.html
vue js判断长按触发及手指的上滑、下滑、左滑、又滑的更多相关文章
- vue.js中父组件触发子组件中的方法
知识点:vue.js中,父组件的method中,触发子组件中的方法,获得子组件中的定义的属性 (1)子组件 : child_crud.js var html_child_crud= "< ...
- vue.js 父组件如何触发子组件中的方法
组件 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊 ...
- 解决vue.js修改数据无法触发视图
data:{checkValue:{}}that.checkValue[key] = [] 赋值无法实时改变变量:(数据其实最终被修改,但是并没有触发检测从而更新视图)原因:Vue 不能检测到对象属性 ...
- Vue.js 判断对象属性是否存,不存在添加
Vue.set是可以对对象添加属性的,这里item对象添加一个checked属性 //if(typeof item.checked=='undefined'){if(!this.item.checke ...
- vue.js使用webpack发布,部署到服务器上之后在浏览器中可以查看到vue文件源码
webpack+vue 2.0打包发布之后,将发布的文件部署到服务器中之后,浏览器中访问的时候会出现一个webpack文件夹,里边会显示vue文件源码 如果不想让vue源文件显示出来,可以在confi ...
- [转]客户端js判断文件类型和文件大小即限制上传大小
原文地址:https://www.jb51.net/article/43498.htm 需要脚本在客户端判断大小和文件类型,由于网上没有适合的,就自己写了一个并测试 文件上传大小限制的一个例子,在此与 ...
- 客户端js判断文件类型和文件大小即限制上传大小
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Vue.js项目中使用 Ajax 和 FormDate 对象上传文件
let param = new FormData(); param.append("paths", this.ruleForm.uploadPath); param.append( ...
- Vue.js 组件的三个 API:prop、event、slot
组件的构成 一个再复杂的组件,都是由三部分组成的:prop.event.slot,它们构成了 Vue.js 组件的 API.如果你开发的是一个通用组件,那一定要事先设计好这三部分,因为组件一旦发布,后 ...
随机推荐
- js中setTimeout() 时间参数为0
当看到下面 这种setTimeout 设置为0 写法的时候一脸懵逼,完全没用过. var fuc = [1,2,3]; for(var i in fuc){ setTimeout(function() ...
- springMVC下载中文文件名乱码【转】
//遇到的现象是,下载含有中文文件名的文件时,能获取到文件,但是使用IE正常,使用firefox,chrome文件名却乱码.//既然如此,就区分一下浏览器再返回好了,处理方式如下 //RESTfull ...
- EF的使用<三>
ExecuteSqlCommand与SqlQuery 在数据上下文DBModel的实例中有个Database属性,其中有两组方法.ExecuteSqlCommand()和.SqlQuery().它们都 ...
- 不装插件,查看.rp文件
AxShare国内平台地址:http://share.axure.org临时急用可以使用公用帐户.用户名:axure@webppd.com,密码:webppd123 上传.rp文件,点击 url 地址 ...
- ABP给WebApi添加SwaggerUI,生成可交互接口文档
在ABP模板项目中,通过SwaggerUI可以为我们的WebApi生成动态的可交互接口文档页面,从而可以很方便的测试调用我们的WebApi接口. 一.集成Swagger 右键项目YoYo.Web,打开 ...
- java实验-3
实验内容 1.XP基础 2.XP核心实践 3.相关工具 实验内容 一.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己 ...
- 全文搜索引擎——Solr
1.部署solr a.下载并解压Solr b.导入项目(独立项目): 将解压后的 server\solr-webapp 下的 webapp文件夹 拷贝到tomcat的webapps下,并重命名为 so ...
- help文档制作 chm
程序中的help文档制作 所用工具:HTML Help Workshop 文件包括:各个html文档,帮助页面的具体内容 hhc文档:help的目录文件 hhk文档:help的索引文件 MAP文件夹中 ...
- (72)Wangdao.com第十二天_JavaScript 错误处理机制
1. Error 实例对象 JavaScript 解析或运行时,一旦发生错误,引擎就会抛出一个错误对象. JavaScript 原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例. va ...
- tp5 查询单个字段的值
$num_lastday = Db::name('test_wx') ->where('num','=',$data['num']) ->order('time desc') ->l ...