项目框架:
vue
+typescript
初始化krpano
引入js:直接用script标签引入即可
1 | // 初始化 |
xml配置文件说明
krpano的场景及效果都配置在xml里面,平时没怎么接触这种配置格式,不过弄清楚里面的逻辑和规则理解起来就很简单啦
配置场景
1 | <!-- 首先是根元素krpano,其他元素都写在根元素里 --> |
小行星效果配置
1 | <!-- 小行星效果的实现 --> |
获取点位
在设置热点的时候,获取热点坐标的必须的,为了更方便地获取坐标,可以在全景图上定一个可以拖动的点位,获取它当前的坐标;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35<!-- 拖拽事件 -->
<action name="draghotspot">
spheretoscreen(ath, atv, hotspotcenterx, hotspotcentery, calc(mouse.stagex LT stagewidth/2 ? 'l' : 'r'));
sub(drag_adjustx, mouse.stagex, hotspotcenterx);
sub(drag_adjusty, mouse.stagey, hotspotcentery);
asyncloop(pressed,
sub(dx, mouse.stagex, drag_adjustx);
sub(dy, mouse.stagey, drag_adjusty);
screentosphere(dx, dy, ath, atv);
print_hotspot_pos();
);
</action>
<scene name="street1" onstart="" lat="0" lng="0" heading="0.0">
<view hlookat="0" vlookat="0" vlookatmin="-50" vlookatmax="41" fovtype="MFOV" fov="120" fovmin="80.5" fovmax="120" limitview="true" />
<preview url="panos/street1/preview.jpg" />
<!-- 下面这两段设置插件和插入热点,注意插件的代码要写在场景内部 -->
<plugin name="hotspot_pos_info"
type="text"
html="drag the hotspots..."
css="font-family:Courier;font-size: 25px;"
padding="8"
align="lefttop" x="10" y="10"
width="600"
height="200"
enabled="false"
/>
<hotspot name="spot100" url="hotspot.png" distorted="true" scale="0.5" ath="+25" atv="+5" ondown="draghotspot();" />
<image>
<cube url="panos/street1/street1_%s.jpg"/>
</image>
</scene>
js与krpano的通信
krpano调用js
在标签上绑定事件调用jscall即可,如1
2<hotspot
onclick="jscall(fn())" />
在vue+ts里面,需要将事件绑定在window上1
2
3
4
5const _window: any = window
_window.fn = () => {
// ...
}
js执行krpano方法
1 | // call里面写对应的krpano方法,这里的krpano是初始化时给krpano对象的命名 |