首页 > 解决方案 > 在对 Pannellum 的 javascript 调用中避免 Eval

问题描述

我有一个网站,我在其中使用 javascript 和pannellum API 来加载多个 360 全景视图。

浏览器偶尔会崩溃,尤其是在我的 iPhone 6 上处于 VR 模式时,不同的 DIV 中总共需要六个 pannellum 实例。

据我所知,浏览器在调用 pannellum 时崩溃,这是我从 eval 函数内部进行的,因为我传递给 pannellum 的数据包含在变量中。

这是调用,以及让我们知道全景图已加载的后续行。

eval("RightPanoInt=pannellum.viewer('RightPanoIntermediary', " + PanoDataIntermediary +");");
RightPanoInt.on("load", function() { LoadedRightPanoIntermediary(); });

在哪里

RightPanoInt 是一个变量,我可以用来检查全景图是否已加载

RightPanoIntermediary 是要加载全景图的 DIV 的 ID。

PanoDataIntermediary 是一个变量,其中包含 pannellum API 所需的数据/参数。

例如

{"autoLoad": true,"pitch": 0,"yaw": 73,"vaov": 180,"haov": 360,"vOffset": 0,"maxPitch": 90,"minPitch": -90, "maxYaw": 180,"minYaw": -180,"maxHfov": 100,"hfov": 100,"minHfov": 10,"showFullscreenCtrl": false,"orientationOnByDefault": false,"showControls": false,"全景":"002.jpg","preview":"BackgroundPaleGreen.jpg"}

下次调用时数据会有所不同,因此参数必须在 PanoDataIntermediary 变量中。

我可以使用 eval 函数的哪些替代方法进行相同的调用?

标签: javascriptevalpannellum

解决方案


好的,上面的回答让我意识到,我真的应该使用对象,而不是使用变量。例如...

var PanoDataIntermediary={"type":"equirectangular"}; // to initiate
PanoDataIntermediary.panorama="Church_HDR_x4_000.jpg"; // to add more parameters
PanoDataIntermediary.autoLoad = true;   
PanoDataIntermediary.pitch=0;
PanoDataIntermediary.yaw=73;
PanoDataIntermediary.hoav=360; // etc
RightPanoInt=pannellum.viewer('panorama', PanoDataIntermediary);

这将在不需要使用 eval 的情况下工作。我需要一些时间来重新整理我现有的代码,看看它是否解决了浏览器崩溃问题。

再次感谢。


推荐阅读