美文网首页
如何在Cesium中停用onTick方法

如何在Cesium中停用onTick方法

作者: 彩云飘过 | 来源:发表于2022-03-24 17:41 被阅读0次

记录一个自己搞了4个小时的问题,原因是API函数没有仔细研读。
在飞行漫游的场景中,我使用到了viewer.clock控制飞行起始和飞行结束,同时注册了飞行的时钟函数和飞行截止事件。碰到的问题是飞行终止事件都调用了,在该事件中移除了飞行时钟刷新事件和飞行终止事件,但是飞行的时钟刷新onTick事件回调函数始终在打印日志,
自己也调用addEventListener 和removeEventListener这两个函数,期望达到事件添加和移除的目的。打印的日志很明显告知,移除并未成功;

尝试 博客 https://blog.csdn.net/chenguizhenaza/article/details/108381509中介绍的方法,并未成功;

记录下最后成功的方法:

看看addEventListener文档,您会发现两种不同的方法来撤消添加事件监听器:一种是调用匹配的removeEventListener,另一种是保存从addEventListener返回值并稍后调用它。

以下是一些显示两种方式的代码。使用对您的代码更有意义的选项,但不要同时使用它们。(不要同时使用它们,很重要)

 // 第一种办法
function onTickCallback(clock) {
    // ... do stuff with every tick ...
}

viewer.clock.onTick.addEventListener(onTickCallback);

function unsubscribeOption1() {
    // 一个选择是调用移除 removeEventListener. 
// 在这个例子中,你不需要保存addEventListenerde 返回值 ("var unsubscribeTicks" )
// 但是你需要回调函数onTickCallback的引用,作为参数传递给r;emoveEventListener 
   viewer.clock.onTick.removeEventListener(onTickCallback);
}

 // 第二种办法
function onTickCallback(clock) {
    // ... do stuff with every tick ...
}

var unsubscribeTicks = viewer.clock.onTick.addEventListener(onTickCallback);

function unsubscribeOption2() {

// 在这个选择中,你需要保存addEventListener的返回值
// 返回值是一个移除的回调函数,它可以清除onTickCallback事件
   unsubscribeTicks();
}


//  我踩的坑在于把两种方式混用:
function onTickCallback(clock) {
    // ... do stuff with every tick ...
}

var unsubscribeTicks = viewer.clock.onTick.addEventListener(onTickCallback);
function unsubscribeOptionMy() {
   viewer.clock.onTick.removeEventListener(unsubscribeTicks);
}

这里截取api函数截图说明:

image.png

借鉴博文
https://www.thinbug.com/q/32995886

相关文章

网友评论

      本文标题:如何在Cesium中停用onTick方法

      本文链接:https://www.haomeiwen.com/subject/dphljrtx.html