博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈Cocos2d-js ListView滑动防止误触
阅读量:7199 次
发布时间:2019-06-29

本文共 2582 字,大约阅读时间需要 8 分钟。

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 }

 

 

 声明:此文为原创文章,未经作者允许,禁止转载!

 

 

 

如果你觉得本文对你有帮助,欢迎支持,请用力拿钱砸向我吧!

 

 

 

转载于:https://www.cnblogs.com/mikeCao/p/9973127.html

你可能感兴趣的文章
Spring MVC中Session的正确用法之我见
查看>>
gsoap简介
查看>>
SQL Server 2008 R2 性能计数器详细列表(三)
查看>>
linux 进程间信号量管理程序之sem_timedwait使用
查看>>
ASP.NET MVC 多语言实现技巧 最简、最易维护和最快速开发
查看>>
uva 784 Maze Exploration(简单dfs)
查看>>
IDFA和IMEI
查看>>
ubuntu 下安装查看pdf的工具
查看>>
【问题解决:SFL4J】启动时SLF4J报错
查看>>
Java中使用Jedis操作Redis
查看>>
OPPO R11完美助攻,男友这样拍照你会更开心
查看>>
Stack Overflow预测:Python将在五年内超越JavaScript
查看>>
再不怕车载系统太陈旧 百度CarLife上手体验
查看>>
首发|Splunk&gt;live!2018中国用户大会上海站完整议题曝光!
查看>>
实时工业大数据产品实践——上汽集团数据湖
查看>>
年轻手机市场的破局者?HUAWEI nova 2系列的野心
查看>>
戴尔推出最新服务器,选用AMD霄龙处理器单路性能可比双路
查看>>
刘强东涉嫌性侵监狱照被曝光
查看>>
85岁老人寒夜里摔倒路边 路过警民温暖“守护”
查看>>
银川特警节前演练为春运保驾
查看>>