cesium绑定鼠标事件,及清除事件(采坑清除事件不起作用,解决方案)

前言:最近在开发cesium项目(其实是supermap+webgl但这个可以使用cesium原生方案,应为supermap webgl是根据cesium源码封装的)。需求监听视图高度,根据不同的高度做不同的处理。

一.cesium绑定鼠标事件方法及清除方法

1.绑定事件方法 

 说明:

方式一:方式一是每次都创建一个实例,可以多个共存且根据名字(变量比如:下面的handler)可以清除指定事件(推荐使用)。

方式二:方式二是直接在viewer实例上添加,清除事件会污染整个viewer实例且当前实例存在其它鼠标事件会一并清除(适合一键清除地图上事件)

//方式一:
var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);//获取地图对象
 handler.setInputAction(function(event) { //设置监听方法
 var height = viewer.camera.positionCartographic.height;//我这里举个例子点击鼠标左键获取当前高度
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

//方式二:
viewer.screenSpaceEventHandler.setInputAction(function (wheelment) {
        var height = viewer.camera.positionCartographic.height;//我这里举个例子点击鼠标左键获取当前高
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

2.事件类型 

Cesium.ScreenSpaceEventType.LEFT_CLICK //鼠标左击事件
Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK //鼠标左键双击事件
Cesium.ScreenSpaceEventType.LEFT_DOWN //左键鼠标按下事件
Cesium.ScreenSpaceEventType.LEFT_UP //左键鼠标抬起事件
Cesium.ScreenSpaceEventType.MIDDLE_CLICK //中键单机
Cesium.ScreenSpaceEventType.MIDDLE_DOWN //中键按下
Cesium.ScreenSpaceEventType.MIDDLE_UP //中键抬起
Cesium.ScreenSpaceEventType.MOUSE_MOVE //鼠标移动
Cesium.ScreenSpaceEventType.PINCH_END //表示两指事件在触摸面上的结束。
Cesium.ScreenSpaceEventType.PINCH_MOVE //两指移动
Cesium.ScreenSpaceEventType.PINCH_START //表示在触摸面上发生两指事件的开始。
Cesium.ScreenSpaceEventType.RIGHT_CLICK //鼠标右击事件
Cesium.ScreenSpaceEventType.RIGHT_DOWN  //鼠标右键按下
Cesium.ScreenSpaceEventType.RIGHT_UP    //鼠标右键抬起
Cesium.ScreenSpaceEventType.WHEEL //鼠标滚轮事件

3.移除鼠标事件

//方式一
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)//移除事件

//方式二
 viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);

二、清除绑定事件

描述flag为boolean传入true启动监听事件,false清除事件

方式一:

不生效方式:

//方式一:
if(flag){
 var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);//获取地图对象
 handler.setInputAction(function(event) { //设置监听方法
 var height = viewer.camera.positionCartographic.height;//我这里举个例子点击鼠标左键获取当前高度
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
//hander.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)//移除事件(放到else里不管用,但是直接放这管用,违背了需求)
 }else{
  handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)//移除事件
}

方式一不生效 原因是 因为 每次都new了一个 handler。所以只需要把其 声明成全局变量即可。 

 生效方式:

//方式一:
  var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);//获取地图对象
  if (flag) {
    handler.setInputAction(function (event) { //设置监听方法
      var height = viewer.camera.positionCartographic.height;//我这里举个例子点击鼠标左键获取当前高度
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    //hander.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)//移除事件(放到else里不管用,但是直接放这管用,违背了需求)
  } else {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)//移除事件
  }

方式二:

if(flag){
//方式二:
viewer.screenSpaceEventHandler.setInputAction(function (wheelment) {
        var height = viewer.camera.positionCartographic.height;//我这里举个例子点击鼠标左键获取当前高
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
}else{
viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
}

本文涉及到的鼠标事件类型api

cesium中文api网址

cesium官方示例网址

cesium官方英文文档,当然看不懂可以看中文文档

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崽崽的谷雨

漫漫前端路,摸爬滚打

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值