这次再谈krpano事件/动作的时间节点,是因为在krpano1.18中对于action元素新增了autorun属性,目的就是让具有该属性的action能够在漫游启动时自动运行。
krpano事件的时间轴
krpano有不少在全景载入前后的事件,它们之间的先后顺序有必要搞清楚。下面按顺序说明全景载入时可以监测到的krpano事件。(krpano 1.20.5)
1 autorun[name].autorun=”preinit”
对任意action添加autorun属性,然后将autorun值设为preinit,这样的话,这个action将在漫游启动时优先调用于任何事件和动作,当多个action都具有该属性时,则按照action的载入顺序执行。注意此时因为还没载入scene,因此对当前scene的数据获取均为null。代码写法如下
1 <action name="..." secure="false" autorun="preinit"> action1(); action2(); ... </action>
2 krpano.onstart
在默认皮肤中,你可能有N个scene的标签,但如果没有通过loadscene,这些scene的内容是不会被载入到内核中进行解析的,在krpano标签的onstart属性里,你可以在这里添加任何action、修改任何元素的属性。因此在1.18的默认模版中,我们可以看到一个名为startup的action,其中就有一个loadscene的action,通常在没有传入scene的name时,会选择载入第一个场景(即scene[0])。注意此时因为还没载入scene,因为当前scene的数据的获取都是null。只要是loadscene之前的,都获取不了当前scene的内容。
1234567 <krpano version="1.18" title="Corfu Holiday Trip" onstart="wait(0);startup();">……<action name="startup">if(startscene === null, copy(startscene,scene[0].name));loadscene(get(startscene), null, MERGE);</action>
3 autorun[name].autorun=”onstart”
对任意的一个action,添加autorun属性,然后将autorun值改为onstart,这样的话,这个action将在漫游启动时调用,当多个action都具有该属性时,则按照载入(书写)顺序执行。该设置的动作直接在krpano.onstart之后执行。如果在krpano的onstart中具有loadscene,或者其它相同具有该属性的前面的action中含有loadscene动作,则可以调用当前scene的信息。如果这个动作之前已经执行了loadscene,则这个动作就会发生在首次onnewsecene之后。
1 <action name="..." secure="false" autorun="onstart"> action1(); action2(); ... </action>
4 onremovepano
如果发生了loa接下来从内存中移除前一个全景的图像文件。也就是上一个场景的全景图像。
5 scene.onstart
在krpano的onstart里有一个startup,其中执行了一次loadscene(1.18之前的默认皮肤的做法,如今新的默认皮肤在krpano 1.19的onstart中不会有任何的action,启动第一个场景采用自启动action的写法,也就是上面一种),因此默认第一个scene的xml内容被载入,也就是这个scene的所有内容要被viewer解析,这些代码解析完后,就到这个scene的onstart出场。这个onstart可以定义pano的view以及image以及一切可能的action。
1 <scene name="scene_achilleion-hof-unten" title="Achilleion - Garden" onstart="" thumburl="panos/achilleion-hof-unten.tiles/thumb.jpg" lat="39.563340" lng="19.904324" heading="0.0">xml代码载入完毕,包括之前在onstart定义的action在这里解析完毕。从这个时刻开始载入预览图。只要有新的xml代码载入(loadpano或者是在html文件定义xml路径)就会调用到这个事件。
6 onxmlcomplete
同onnewscene,两个是一致的,针对xml内容。
注意。目前发现onxmlcomplete和onnewscene在首次调用时会调用两次。也就是执行一次onxmlcomplete,然后执行onnewscene,接着继续执行一次onxmlcomplete,然后执行onnewscene
7 onnewscene
同onxmlcomplete,两个是一致的,只是应用层面(仅针对scene标签)相对窄一些。从这个时刻开始载入预览图。
注意。目前发现onxmlcomplete和onnewscene在首次调用时会调用两次。也就是执行一次onxmlcomplete,然后执行onnewscene,接着继续执行一次onxmlcomplete,然后执行onnewscene
8 html中embedpano中onready属性
可用于设定回调函数获取嵌入完成以及通知krpano viewer准备好全景的应用。
123456 embedpano({target:”krpanoDIV”, onready:krpanoReady});function krpanoReady(krpano){krpano.call(“trace(krpano is ready…)”);}
9 onpreviewcomplete
预览图载入完毕。
10 onnewpano
按照view标签信息开始载入新的全景图像。
11 onloadcomplete
当前场景的全景图像载入完成。
12 onblendcomplete
场景融合完成
在 “krpano的各个事件event的先后次序(时间节点)是怎样的?” 上有 3 条评论