JavaScript API

播放器有一个外部 API,因此可以使用 JavaScript 进行控制。

皮肤使用这个确切的 API。由于皮肤文件没有缩小,您可以简单地查看皮肤文件以了解某些事情在内部是如何完成的。

下面的所有示例都使用 pano 作为对象。但是,如果您在皮肤中使用 JavaScript,则必须使用 player 作为对象。

在皮肤编辑器中使用 JavaScript

在皮肤编辑器中使用 JavaScript 有两种方法。代码元素和“转到 URL”作。以前使用文本框,现在是旧方法。

代码元素

代码元素是用于将 Javascript 添加到项目的专用皮肤元素。

了解如何使用 code 元素添加代码。

转到 URL 作

这使您可以通过皮肤中的作触发 JavaScript 代码。例如,将作添加到文本元素,将源设置为鼠标单击 ,将作设置为转到 URL,然后在 URL 字段中添加 javascript: Your JavaScript code...

喜欢:

javascript: alert("Button clicked!"); 

文本框

遗产!使用文本框将 JavaScript 添加到皮肤是一种 LEGACY 方法。请改用代码元素

您可以将 JavaScript 代码放入 Text Box 皮肤元素的文本字段中:

javascript: 开始文本。 后面的所有内容都将放入文本框的 innerHTML 中。

通常,您会使用它来进行简单的计算。例如,将 javascript:5+5 显示为 10

但是,您可以滥用它来运行任何 JavaScript 代码:放入 javascript:""; your JavaScript code goes here text 元素中。然后,这将在加载皮肤时执行。例如,您可以将函数注册到某些玩家事件:

javascript: ""; player.on("imagesready", function () {  alert("Panorama loaded!"); }); 

设置

pano.readConfigUrl(url: String, base: String="") 从 url 读取节点/游览配置。base 参数定义不同的基本路径。

pano.readConfigUrlAsync(url: String, callback: Function, base: String="")readConfigUrl 相同,但异步。

从字符串中 pano.readConfigString(xml: String) 读取节点/游览配置。

pano.readConfigXml(xml: Document) 从 XML 文档对象读取节点/游览配置。

pano.getBasePath() pano.setBasePath(path: String) 获取/设置基本路径。基本路径将添加到相对文件名和 url 中。如果 HTML 文件的基础与 xml 配置文件不同,这很有用。另请注意, 占位符 $(r) 将被玩家的基本路径替换。

为所有外部文件(如配置、图像、图块和嵌入视频) pano.setCrossOrigin(s: String) 设置 crossorigin 属性。默认值为匿名

观看方向

pano.getPan() 返回当前平移角度。

pano.getPanN() 返回归一化的当前平移角度(介于 -180.0 和 +180.0 之间)。

pano.getPanNorth() 返回当前平移角度,包括节点向北偏移。

pano.setPan(angle_in_degrees: Number) 设置当前平移角度。

pano.setPanNorth(angle_in_degrees: Number) 设置当前平移角度,同时考虑节点的北偏移。

pano.changePan(offset_in_degrees: Number) 更改当前平移角度。

pano.getTilt() 返回当前倾斜角度。

pano.setTilt(angle_in_degrees: Number) 设置当前倾斜角度。

pano.changeTilt(offset_in_degrees: Number) 更改当前倾斜角度。

pano.getFov() 返回当前视野 View,具体取决于 FoV 模式。

pano.setFov(angle_in_degrees: Number) 设置当前视野 View,具体取决于 FoV 模式。

pano.changeFov(offset_in_degrees: Number) 更改当前视野 View,具体取决于 FoV 模式。

pano.getVFov() 返回当前垂直视野。

pano.setVFov(angle_in_degrees: Number) 设置当前垂直视野。

pano.getHFov() 返回当前水平视野。

pano.getRoll() 返回当前横滚角度。

pano.setRoll(angle_in_degrees: Number) 设置当前横滚角度。

pano.setPanTilt(pan: Number, tilt: Number), pano.setPanTiltFov(pan: Number, tilt: Number, fov: Number)

便利功能。

pano.setProjection(v: Number)pano.getProjection():Numberpano.changeProjection(v: Number, speed: Number) 获取或设置当前投影。4 – 直线,9 – 立体,12 – 鱼眼。

pano.setDefaultView() 将视图设置为默认视图。

pano.moveTo(pan: Number, tilt: Number, fov: Number, speed: Number, roll: Number, projection: Number); 将视图移动到某个位置。

pano.moveToDefaultView() 将视图移动到默认位置。

限制

pano.getViewerLimits():Object, pano.setViewerLimits(limits:Object) 检索或设置播放器的当前查看器限制。limits 对象包含 'pan' 和 'tilt' 的对象。这些对象又具有“min”和“max”的值。如果使用 set 函数,则只需提供要更改的值。

以下是设置查看器限制以及将查看器重置为无限制的示例调用:

pano.setViewerLimits({  pan: { min: -100, max: 100 },  tilt: { min: -30, max: 70 }, }); pano.setViewerLimits({  pan: { min: 0, max: 360 },  tilt: { min: -90, max: 90 }, }); 

自动旋转和动画

pano.setAutorotate(speed: Number, delay: Number, rth: Number) 设置自动旋转参数。

pano.startAutorotate(speed: Number, delay: Number, rth: Number) 启动(并启用)自动旋转。

pano.toggleAutorotate(speed: Number, delay: Number, rth: Number) 切换自动旋转。

pano.stop 自动旋转() 停止(并禁用)自动旋转。

pano.pauseAutorotate() 暂停自动旋转。如果自动旋转当前处于活动状态,这将停止自动旋转。它不会禁用自动旋转,因此在超时后它将重新启动。

pano.resumeAutorotate() 恢复自动旋转。如果当前已启用,这将启动自动旋转。它不会影响“启用”状态。

pano.setAutorotateNodeFilter(tag: String) 此标签指定在自动旋转自动切换节点时将考虑哪些节点。

pano.getIsAutorotating() 如果自动旋转当前正在运行。

pano.startAnimation(animsequence: String) 播放给定的动画序列。始终从序列的开头开始。

pano.resumeAnimation(animsequence: String) 播放给定的动画序列。如果动画序列之前正在播放并被用户中断,则它将从中断点继续。

媒体元素

pano.playSound(id:字符串) 使用此媒体 ID 启动声音。

pano.pauseSound(id: 字符串) 使用此媒体 ID 暂停声音。

使用此媒体 ID 在播放和暂停声音之间 pano.playPauseSound(id: String, loop: Number) 切换。

使用此媒体 ID 在播放和停止声音之间 pano.playStopSound(id: String, loop: Number) 切换。

pano.soundGetTime(id: String):Numberpano.soundSetTime(id: String, time: Number) 获取/设置当前播放声音的位置。

pano.activateSound(id: String, state: Number) 弹出带有 id 的图像或视频。 状态 :0 – 隐藏,1 – 显示,2 – 切换。

pano.stopSound(id:字符串) 使用此媒体 ID 停止声音。

pano.isPlaying(id: String):Boolean 检查此媒体元素当前是否正在播放。

pano.setVolume(id: String, volume: Number) 将此元素的体积(介于 0.0 和 1.0 之间)设置为固定值。id _ main 更改全局卷。

pano.changeVolume(id: String, volume: Number) 更改此元素的音量。id _ main 更改全局卷。

pano.disableSoundLoading() 防止加载声音元素。

pano.setMediaVisibility(id: String) 更改固定图像或视频的可见性。0 – 隐藏,1 – 显示,2 – 切换。

pano.getMediaObject(id: String) 返回特定固定媒体元素的源对象。

pano.changeLensflares(v: Number) 设置镜头光晕的可见性。0 – 显示,1 – 隐藏,2 – 切换。

热点

pano.addHotspot(id: String, pan: Number, tilt: Number, div: DomElement) 将 DomElement 作为热点添加到全景图中。

pano.updateHotspot(id: String, pan: Number, tilt: Number) 更新热点位置。

pano.removeHotspot(id: String) 删除单个热点。

pano.removeHotspots() 删除所有热点。

pano.getPointHotspotIds():Array<String> 将所有热点 ID 获取为字符串数组。

pano.getCurrentPointHotspots():Array<DomElement> 返回所有点热点 div 的数组。

pano.getHotspot(id: String):Object 将热点的所有信息作为对象获取。

示例代码:

var element = document.createElement("img"); element.setAttribute("src", "hsimage.png"); element.onclick = function () {  pano.openNext("{node10}"); }; pano.addHotspot("myid", 0, 90, element); console.log(pano.getPointHotspotIds()); pano.updateHotspot("myid", 0, -90); console.log(pano.getHotspot("myid")); pano.removeHotspot("myid"); console.log(pano.getPointHotspotIds()); 

pano.getPolygonMode():Number, pano.setPolygonMode(v: Number, toggle: Number) 获取或设置当前多边形模式。如果 toggle 为 1,则在 Off 和模式 v 之间切换。

pano.showOnePolyHotspot(id: String)pano.hideOnePolyHotspot(id: String)pano.toggleOnePolyHotspot(id: String) 显示/隐藏特定多边形热点。

pano.changePolyHotspotColor(id: String, bgColor: Number, bgAlpha: Number, borderColor: Number, borderAlpha: Number) 设置特定多边形热点的背景和边框颜色。您可以对 id 使用空字符串来定位所有多边形热点。

例如,对于具有纯绿色边框的红色半透明多边形: player.changePolyHotspotColor("Poly01", 0xff0000, 0.5, 0x00ff00, 1);

使用十六进制数作为颜色,前缀为 0x。alpha 值是介于 0 和 1 之间的数字。

pano.setPolyHotspotHandcursor(id: String, enable: Boolean) 切换特定多边形热点的手形光标。您可以对 id 使用空字符串来定位所有多边形热点。

pano.getHotspotPropValue(nodeId: String, hsId: String, varname: String) 检索在项目中定义的自定义热点属性的值。

pano.setHotspotPropValue(nodeId: String, hsId: String, varname: String, value: Any) 设置在项目中定义的自定义热点属性的值。

虚拟导览

pano.getIsTour() 如果项目是游览,或者只是一张全景图。

pano.getNodeIds():Array<String> 获取所有节点 ID 的列表。

pano.getNodeUserdata(id: String):Object 获取节点 ID 的用户数据 。如果 id 为空,则返回当前节点数据。

检索 Pano2VR 中定义的自定义用户数据属性的值 player.getNodeUserdataPropValue(id: String, varname: String)

player.setNodeUserdataPropValue(id: String, varname: String, value: String) 设置自定义用户数据属性的值,在 Pano2VR 中定义。

pano.getNodeLatLng(id: String):Object 获取节点 ID 的 GPS 数据。如果 id 为空,则返回当前节点数据。

pano.getNodeDistance(fromId: String, toId: String):Number 获取 2 个节点之间的距离(以米为单位),前提是两个节点都有 GPS 数据。

pano.getNodeTitle(id: String):String 获取节点 id 的节点标题。如果 id 为空,则返回当前节点数据。

pano.getCurrentNode():字符串获取当前节点的节点 ID。

pano.getNextNode() 获取游览列表中下一个节点的节点 ID。如果当前节点是最后一个节点,则返回第一个节点 ID。

pano.getPrevNode() 获取游览列表中上一个节点的节点 ID。如果当前节点是第一个节点,则返回最后一个节点 ID。

pano.getNodesWithTag(tag:String)::Array<String> 获取用户数据中具有特定标记的节点数组。

pano.nodeVisited(id:String):Boolean 如果已访问该节点,则返回 true。对于当前节点,第一次访问时返回 false

pano.openNext(url:String,parameter:String) 打开下一个全景图,如果 url 位于 {nodeid} 的 from 中,它将更改游览中的节点。

pano.getLastVisitedNode():String 返回上次访问的节点的 ID。

pano.setTransition(v:对象) 设置在全景图之间移动时的过渡参数:

  • 类型 切割 交叉溶解等。
  • before:before 效果(0 – 无;2 – 放大)
  • 之后 :后效(0 – 无;2 – 放大;3 – 缩小;4 – 飞入)
  • TransitionTime:过渡时间
  • waitfortransition: – 如果后效应该等待过渡完成
  • ZoomedFOV:选择“放大”时要缩放的 FOV
  • 缩放速度 :选择“放大”时使用的速度
  • dipcolor:如果选择 diptocolor 类型,则要使用的颜色
  • softedge:如果 是 soft edge 用于过渡类型

pano.getZoomCenterCursor()pano.setZoomCenterCursor(value:Boolean) 获取/设置光标处的缩放值。

要在皮肤的文本框中显示缩放值,请添加带有“设置值”作的“鼠标单击”,并将以下值作为值: javascript: player.getZoomCenterCursor()

全屏

方法名称不言自明。

pano.setFullscreen(flag:Boolean)

pano.enterFullscreen()

pano.exitFullscreen()

pano.toggleFullscreen()

pano.getIsFullscreen()

视频全景

pano.videoPanoPlay()pano.videoPanoStop()pano.videoPanoPause() 播放/停止/暂停视频全景图。

pano.getVideoPanoTime():Numberpano.setVideoPanoTime(t:Number) 获取/设置视频全景图播放头的当前时间。

pano.getVideoPanoObject():DomVideoElement 获取对 DOM 视频元素的引用。

pano.setVideoPanoSource(v) 设置视频全景图的源对象。

虚拟现实

pano.enterVR():布尔值进入 VR 模式。

pano.exitVR():布尔值退出 VR 模式。

pano.toggleVR():布尔值切换 VR 模式。

pano.isInVR():布尔值如果玩家当前处于 VR 模式,则返回 true。

pano.hasVR():布尔值如果设备支持 VR 模式,则返回 true。

杂项

pano.getIsLoading() 检查全景图是否仍在加载中。

pano.getIsLoaded() 检查全景图是否已完全加载。

加载 pano.getPercentLoaded():Number 了多少全景图(介于 0.0 和 1.0 之间的数字)。

pano.getIsTileLoading() 检查当前是否正在加载多分辨率磁贴。

pano.setLocked(value: Boolean) 禁用与全景图的所有交互。

pano.setLockedMouse(value: Boolean) 禁用鼠标与全景图的交互。

pano.setLockedKeyboard(value: Boolean) 禁用键盘与全景图的交互。

pano.setLockedWheel(value: Boolean) 禁用鼠标滚轮与全景图的交互。

pano.getPositionAngles(x: Number, y: Number):Object 返回一个对象,其中包含给定屏幕位置的平移倾斜值。

pano.getPositionRawAngles(x: Number, y: Number):Object 与 getPositionAngles 相同,但忽略了全景图的当前位置,因此角度就像 pan=0 和 tilt=0 一样。

pano.setMargins(l: Number, t: Number, r: Number, b: Number) 允许你定义通常在皮肤编辑器中定义的播放器周围的边距。

pano.setMargins(params:Object) 还允许您在播放器周围设置边距,就像上面的函数一样,但为您提供了更多选项。params 对象可以包含(但不必包含全部):

  • lefttoprightbottom:每个对象,包含单位 ,其中单位应为 px%。
  • transition:包含持续时间延迟 (以毫秒为单位)以及 timingfunction 的对象。timingfunction 支持的值为:lineareaseease-inease-outease-instep-end

例:

pano.setMargins({  left: { value: 30, unit: "%" },  transition: { duration: 500, timingfunction: "ease" }, }); 

pano.getViewerSize():对象返回一个包含全景播放器的“宽度”和“高度”的对象。

pano.getViewMode():Number, pano.changeViewMode(v: Number) 获取或设置当前视图模式。0 – 连续模式,1 – 拖动模式,2 – 切换。

pano.update 全景() 重新绘制全景图。

pano.isTouching() 如果全景播放器当前正在移动设备上触摸。

pano.getIsMobile() 如果播放器当前在移动浏览器上运行。

pano.getGyroAvailable():Boolean 如果陀螺仪在当前设备上可用。

pano.getUseGyro()pano.setUseGyro(v:Boolean, useRoll:Boolean) 如果陀螺仪在移动设备上使用。

pano.getOS():数字播放器当前运行的作系统。0 – 未知,1 – Windows,2 – Mac,3 – Linux,4 – iOS,5 – Android

pano.getBrowser():数字播放器当前运行的浏览器。0 – 未知,1 – Chrome,2 – Firefox,3 – Safari,4 – Edge,5 – IE,6 – Meta Quest 浏览器

pano.getBrowserTheme():数字播放器当前运行的浏览器的主题。0 – 浅色主题,1 – 深色主题

皮肤变量

pano.getVariableValue(varName: String):Anypano.setVariableValue(varName: String, varValue: Any) 访问皮肤变量。

pano.setVariableOptions(varName: String, options: Object):Boolean 在选项对象中,您可以设置:

  • keep:当设置为 true 时,该变量存储在浏览器 cookie 中,并在稍后再次打开项目时从那里更新
  • cookiePath:cookie 路径
  • cookieExpireDays:一个数字,指定距离 cookie 过期还有多少天

如果成功,则返回 true。

pano.setSuperCookie(superCookieName: String, options: Object) 在选项对象中,您可以设置:

  • cookiePath:cookie 路径
  • cookieExpireDays:一个数字,指定距离 cookie 过期还有多少天

一旦定义了超级 cookie,并且您稍后将变量设置为存储在 cookie 中(使用 setVariableOptions() 函数),该变量将不会存储在单独的 cookie 中,但所有此类变量将被收集并存储在一个超级 cookie 中。这允许您省略每个域 50 个 cookie 的限制。

地图和平面图

pano.getMapsContainingNode(id: String):Array<String> 返回给定节点所在的地图 ID(平面图)列表。

pano.getMapIDs():Array<String> 返回项目中所有地图 ID(地图和平面图)的列表。

pano.getFloorplanIDs():Array<String> 返回项目中所有平面图 ID 的列表。

pano.hasMap():布尔值如果项目至少有一个映射,则返回 true。

pano.hasFloorplan():布尔值如果项目至少有一个平面图,则返回 true。

pano.getFirstMap():字符串返回项目中第一个地图的 ID。

pano.getFirstFloorplan():String 返回项目中第一个平面图的 ID。

翻译

pano.getLanguage():字符串返回播放器当前使用的语言的代码(如“en”或“en-US”)。

pano.setLanguage(langCode:String) 告诉玩家使用哪种语言。

玩家活动

播放器提供了一个事件系统,其中事件在某些点触发。您还可以将自己的函数注册到这些事件中。

pano.addListener(eventName:String, listener:Function)

pano.on(eventName:String, listener:Function)

示例代码:

pano.on("changenode", function () {  alert("Node changed!"); }); 

pano.removeEventListener(eventName:String, listener:Function) 从某个事件中删除以前注册的函数。

pano.triggerEvent(eventName:String) 手动触发某个事件。

可用事件列表:

事件名称 描述 参数
configloaded 配置文件已加载 没有
viewerinit 配置文件已加载,播放器已准备就绪 没有
downloadprogress 每当图像下载进行时 percentLoaded
beforechangenode 在切换到另一个全景之前 没有
beforechangenodeid 在切换到另一个全景之前 oldNodeId 节点 Id
changenode 切换到另一个全景图后 没有
changevisitednodes 在访问节点列表发生更改时发出信号 没有
sizechanged 查看器大小已更改 WH
viewmodechanged 视图模式已更改 没有
polymodechanged 多边形模式已更改 没有
gyroavailable 当检测到或未检测到设备上的陀螺仪时 available
gyrochanged 移动设备上的陀螺仪已启用/禁用 没有
autorotatechanged 自动旋转已启动/停止 没有
imagesready 全景图已完成加载 没有
timer 连续定时器 没有
positionchanged 全景图的位置(平移/倾斜/视场角)已更改 没有
projectionchanged 当前预测已更改 没有
fullscreenenter 进入全屏模式 没有
fullscreenexit 退出全屏模式 没有
playerstatechanged 许多玩家状态之一发生了变化,例如 hasGyro、hasVR,.. 没有
repaint 每次更新全景图时 没有
tilesrequested 多分辨率磁贴开始加载 没有
tilesready 多分辨率瓦片完成加载 没有
videostarted 视频元素已启动 video
videopaused 视频元素已暂停 video
videoended 视频元素已结束 video
hotspotsremoved 热点已从当前全景图中删除 没有
clonerchanged 每当皮肤中的克隆人更新时 没有
varchanged_varname 每当某个变量的值发生变化时 没有
webglready 创建 WebGL 上下文 没有
renderframe 如果您想在全景图上绘画,请附加到此事件。使用播放器函数 getWebGlContext() 获取 WebGL 上下文 没有
languagechanged 每当玩家设置为使用另一种语言时 language
hotspotsupdated 每当热点因全景图中的某些交互而更新时 没有
activehotspotchanged 活动热点(当前具有鼠标悬停功能的热点)已更改 hotspot
playerdbclick 当在全景图中双击时 平移 倾斜
playerclick 单击全景图时 平移 倾斜
playerdown 在全景图上按下鼠标按钮时 平移 倾斜
playerup 在全景图上释放鼠标按钮时 平移 倾斜
hastouch 检测到设备有触摸事件 没有
hotspotsremoved 在节点更改之前删除全景图的热点时 没有
transistionstarted 玩家将在过渡开始时触发 没有
transistionended 玩家将在过渡结束时触发 没有

另请参阅...

上次修改时间:2025 年 5 月 28 日