js 触摸事件

1.触摸事件 -- 单点

onTouchBegan:function(touch,event){

        var touchPoint = touch.getLocation();
        return true;//不会向下执行其他事件了
    },

onTouchMoved:function (touch, event) {
    },

onTouchEnded:function (touch, event) {
    },


注册事件层

onEnter:function(){
        cc.registerTargettedDelegate(cc.MENU_HANDLER_PRIORITY-1, true, this); //注册层次大于 0 不管用
        this._super();
    },
    onExit:function(){
        cc.unregisterTouchDelegate(this);
        this._super();
    }


2.触摸事件 -- 多点

onTouchesBegan:function (touches, event) {
    },
onTouchesMoved:function (touches, event) {
            if (touches) {
                 cc.p(touches[0].getLocation().x, touches[0].getLocation().y);  //获得触摸地点坐标

                var delta = touches[0].getDelta();   //delta.y 触摸动距离,根据这个可以移动控件
            }
    },
onTouchesEnded:function (touches, event) {},
onTouchesCancelled:function (touches, event) {}




3.屏蔽层

1.简单的屏蔽

(1)按钮实现:在一个 layer 上放一个和屏幕一样大的按钮 menu,设成透明的,所有低于这个按钮的事件都会被这个按钮所接受,不会向下传递。

(2)屏蔽层实现:

onEnter:function(){
        cc.registerTargettedDelegate(cc.MENU_HANDLER_PRIORITY-1, true, this); //设成比按钮的层次低
        this._super();
    },
    onExit:function(){
        cc.unregisterTouchDelegate(this);
        this._super();
    }


onTouchBegan:function(touch,event){
        var pos = this.Menu.convertTouchToNodeSpace(touch);//按钮的 Menu


        var ret = true;
        if(cc.rectContainsPoint(this.ItemMenu.rect(), pos1))//按钮的ItemMenu 
        {
            this._close.activate();//可无
            ret = false;
        }

      return ret;//返回 true 屏蔽所有
    },


2.屏蔽层上又 tableview、scrollview 。。。

按钮实现:这些 UI 事件都低于按钮事件,很多事件都会在设的按钮屏蔽层处理掉,tableview 。。。事件不会响应。

                    table.setTouchPriority(cc.MENU_HANDLER_PRIORITY-2);  //设成比按钮处理事件层高就行了。


3.scrollview上有tableview,滑动tableview时scrollview不动

(1)tableview 所在的 layer 

this.setTouchPriority(cc.MENU_HANDLER_PRIORITY-2);
this.setTouchMode(cc.TOUCH_ONE_BY_ONE);
this.setTouchEnabled(true); 


tableView.setTouchPriority(cc.MENU_HANDLER_PRIORITY-3);


onTouchBegan:function (touch, event) {
        var pos = touch.getLocation();

        if(cc.rectContainsPoint(rect, pos)){//触摸在tableview 上不向下传递则scrollview 无法响应  
            return true;
        }


        return false;
    },


4.通过移除和添加屏蔽层,实现一些屏蔽


4.按钮屏蔽问题

按钮做底层屏蔽一些事件,会影响到有限级别低于按钮的事件,大部分事件都在按钮层处理了。


1.单触摸事件

this.setTouchPriority(cc.MENU_HANDLER_PRIORITY-2);  //层设的比按钮低

this.setTouchEnabled(true);

this.setTouchMode(cc.TOUCH_ONE_BY_ONE);


onTouchBegan:function (touch, event) {  //必须返回 true onTouchMoved才能接到事件

    return true;

},

onTouchMoved 才会响应


层上的其他按钮好使

设置按钮 menu.setTouchPriority(cc.MENU_HANDLER_PRIORITY-3); 




方法

this.setTouchPriority(cc.MENU_HANDLER_PRIORITY-2);
this.setTouchMode(cc.TOUCH_ONE_BY_ONE);
this.setTouchEnabled(true);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在原生 JavaScript 中,你可以使用触摸事件来处理移动设备上的触摸交互。下面是一些常用的触摸事件和它们的使用方法: 1. touchstart:当手指触摸屏幕时触发。可以使用 event.touches 来获取所有触摸点的信息。 ```javascript element.addEventListener('touchstart', function(event) { var touches = event.touches; // 处理触摸事件 }); ``` 2. touchmove:当手指在屏幕上滑动时触发。可以使用 event.touches 来获取所有触摸点的信息。 ```javascript element.addEventListener('touchmove', function(event) { var touches = event.touches; // 处理触摸事件 }); ``` 3. touchend:当手指离开屏幕时触发。可以使用 event.changedTouches 来获取所有离开屏幕的触摸点的信息。 ```javascript element.addEventListener('touchend', function(event) { var touches = event.changedTouches; // 处理触摸事件 }); ``` 除了上述事件,还有一些其他的触摸事件,如 touchcancel(当触摸被取消,例如由于系统事件中断)等。你可以根据需要选择合适的事件来处理触摸交互。 在处理触摸事件时,你可以使用 event 对象的属性来获取触摸点的坐标等信息。例如,event.touches[i].clientX 表示第 i 个触摸点相对于可视窗口的水平坐标。 注意:触摸事件在移动设备上使用,而鼠标事件在桌面设备上使用。为了兼容不同设备,你可以同时监听触摸事件和鼠标事件,并在事件处理程序中进行相应的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值