浅谈Cocos2d-js ListView滑动防止误触
Event背景
最近,接到一个需求,优化房间内设置界面:
表面问题:用户在按钮表面,滑动界面的时候,总会误触到界面上的按钮或者复选框
根本问题:由于ListView的事件具有传递性,导致双重事件触发,既滑动又选中了按钮
解决方案:在listView上,addChild一个Layout,加以触摸事件监听,阻止和传递事件
聪明的我一下子就想到了~
具体方案:
1. 在onTouchMoved的时候,判断用户点击位置是Layout,还是ListView的子节点(按钮和复选框)
a: 如果触摸的是Layout之外的节点,阻止ListView除Layout自身外,所有孩子节点事件传递(防止误触的关键)
cc.eventManager.pauseTarget(allChildren, true);
b: 如果触摸是Layout本身自己,恢复ListView所有孩子节点事件传递
cc.eventManager.resumeTarget(allChildren, true);
2.在onTouchEnded的时候,恢复ListView所有孩子节点的事件传递
界面:

层级结构:

代码实现:
1 preventSlidingAccidents: function(panel){
2 panel.setSwallowTouches(false);
3 // ----------------------------- 防止滑动误触 by Mike -------------------------START-------
4 var panelLayout = panel.getChildByName("panelLayout");
5 if(!panelLayout) return;
6 var p = panelLayout.parent;
7 var childs = p.children;
8 var arr = [];
9 for(var i = 0; i < childs.length; i++)
10 {
11 var curNode = childs[i];
12 var curNodeDescription = curNode.getDescription();
13 if(curNodeDescription !== "Layout")
14 {
15 arr.push(curNode);
16 }
17 }
18
19 var addViewListener = function(arr){
20 return cc.EventListener.create({
21 event: cc.EventListener.TOUCH_ONE_BY_ONE,
22 swallowTouches: false,
23 onTouchBegan: function (touch, event) {
24 return true;
25 },
26 onTouchMoved: function (touch, event) {
27 // cc.log(" ========== onTouchMoved");
28 var target = event.getCurrentTarget();
29 var movePos = touch.getDelta();
30 var limitX = 1;
31 var limitY = 1;
32 var pos = target.getParent().convertTouchToNodeSpace(touch);
33 if(cc.rectContainsPoint(target.getBoundingBox(), pos)) {
34 // cc.log("=================== limitX ===== " + limitX);
35 // cc.log("=================== limitY ===== " + limitY);
36 // cc.log("=================== movePos ===== " + JSON.stringify(movePos));
37 if (Math.abs(movePos.x) > limitX || Math.abs(movePos.y) > limitY) {
38 for(var i = 0; i < arr.length; i++) {
39 cc.eventManager.pauseTarget(arr[i], true);
40 }
41 }
42 else{
43 for(var i = 0; i < arr.length; i++) {
44 cc.eventManager.resumeTarget(arr[i], true);
45 }
46 }
47 }
48 return true;
49 },
50 onTouchEnded:function (touch, event) {
51 // cc.log(" ========== onTouchEnded");
52 for(var i = 0; i < arr.length; i++) {
53 cc.eventManager.resumeTarget(arr[i], true);
54 }
55 }});
56 };
57 cc.eventManager.addListener(addViewListener(arr), panelLayout);
58 // ----------------------------- 防止滑动误触 by Mike ---------------------------END-----
59 }
后续工作,发现了一种更加简单的方法,不用添加节点,就可以阻挡滑动事件的触发
setTextClick: function (listnode,number,radio,callback) {
var that = this;
var _callback = callback || function(){};
return cc.EventListener.create({
event: cc.EventListener.TOUCH_ONE_BY_ONE,
swallowTouches: false,
onTouchBegan: function (touch, event) {
if(radio) radio.childIsMove = false;
},
onTouchMoved: function (touch, event) {
if(radio) radio.childIsMove = true;
},
onTouchEnded: function (touch, event) {
if(radio && radio.childIsMove) return; // 如果复选框的子节点(文字或者图片)被滑动
}
)}
}
声明:此文为原创文章,未经作者允许,禁止转载!
如果你觉得本文对你有帮助,欢迎支持,请用力拿钱砸向我吧!


浅谈Cocos2d-js ListView滑动防止误触的更多相关文章
- 浅谈Vue.js
作为一名Vue.js的忠实用户,我想有必要写点文章来歌颂这一门美好的语言了,我给它的总体评价是“简单却不失优雅,小巧而不乏大匠”,下面将围绕这句话给大家介绍Vue.js,希望能够激发你对Vue.js的 ...
- 浅谈ScrollView嵌套ListView及ListView嵌套的高度计算
引言 在Android开发中,我们有时会需要使用ScrollView中嵌套ListView的需求.例如:在展示信息的ListView上还有一部分信息展示区域,并且要求这部分信息展示区域在ListVie ...
- 闲聊——浅谈前端js模块化演变
function时代 前端这几年发展太快了,我学习的速度都跟不上演变的速度了(门派太多了,后台都是大牛公司支撑类似于facebook的react.google的angular,angular的1.0还 ...
- 浅谈对Js闭包的理解
理解Js的闭包,首先让我们先看几个概念 执行环境(executive environment)每个函数都有自己的执行环境,匿名函数默认为全局环境. 作用域链(scope chain)子函数继承父函数, ...
- 浅谈 Underscore.js 中 _.throttle 和 _.debounce 的差异
Underscore.js是一个很精干的库,压缩后只有5.2KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程. 本文仅探讨Underscore.js的两个 ...
- Vue 浅谈前端js框架vue
Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vu ...
- 【转】浅谈Node.js单线程模型
Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这 ...
- 浅谈 Unserscore.js 中 _.throttle 和 _.debounce 的差异
来源:http://blog.coding.net/blog/the-difference-between-throttle-and-debounce-in-underscorejs Unsersco ...
- 【第三周读书笔记】浅谈node.js中的异步回调和用js-xlsx操作Excel表格
在初步学习了node.js之后,我发现他的时序问题我一直都很模糊不清,所以我专门学习了一下这一块. 首先我们来形象地理解一下进程和线程: 进程:CPU执行任务的模块.线程:模块中的最小单元. 例如:c ...
随机推荐
- 全志A33驱动GT911触摸屏
0x00 环境说明: 所使用的开发板为锐尔威视的插针版A33_Vstar 触摸屏驱动IC为GT911 接线参照开发板的TP线路 0x01 修改系统配置文件: 笔者所使用的A33开发板的系统配置文件路径 ...
- Qt QLabel 大小随内容自动变化 && 内容填充整个label空间
图1:label的本身大小 图2:给label设置文字,不做任何别的设置 ui->label->setText(QObject::tr("current font is %1&q ...
- Go 初体验 - 并发与锁.1 - sync.Mutex 与 sync.RWMutex
==== Mutex为互斥锁,顾名思义,被Mutex锁住的代码同时只允许一个协程访问,其它协程进来就要排队 如何使用?看代码: 输出: 释义: 并发1000个协程同时更改m的元素,这样会有一部分更改成 ...
- Java -- 基于JDK1.8的ArrayList源码分析
1,前言 很久没有写博客了,很想念大家,18年都快过完了,才开始写第一篇,争取后面每周写点,权当是记录,因为最近在看JDK的Collection,而且ArrayList源码这一块也经常被面试官问道,所 ...
- 移动App专项测试
移动App测试实战—专项测试 转自:http://www.51testing.com/html/58/n-3713758.html 我们在进行了手工的功能测试之后,也开发了一些自动化测试用例,并且做了 ...
- WTForms
一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 用户登录简例: fr ...
- 2018-2019-2 网络对抗技术 20165305 Exp4 恶意代码分析
Exp4 恶意代码分析 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysi ...
- vue配置手机通过IP访问,Win10让局域网内其他电脑通过IP访问网站的方法
vue配置手机通过IP访问config/index.js// Various Dev Server settings host: '0.0.0.0', // can be overwritten by ...
- Redis做分布式锁
在分布式系统中,在接口没有保证幂等性或者在某些场景下相同的服务需要有且仅有一个服务执行的情况下,需要使用分布式锁来保证系统的安全执行. 分布式锁的执行顺序,有服务A,分别部署了三个节点为A1.A2.A ...
- ABP入门系列之1——ABP总体介绍
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点, ...