0

我有一个网站,我在其中使用 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 函数的哪些替代方法进行相同的调用?

4

2 回答 2

1

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

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 的情况下工作。我需要一些时间来重新整理我现有的代码,看看它是否解决了浏览器崩溃问题。

再次感谢。

于 2018-12-05T21:34:03.040 回答
0

你试过这个(没有eval)吗?

var RightPanoInt = pannellum.viewer('RightPanoIntermediary', PanoDataIntermediary);

根据你的问题,PanoDataIntermediary是一个变量保存数据。您需要的唯一原因eval是如果PanoDataIntermediary仅持有另一个保存数据 的变量的名称。

此外,该语句eval("RightPanoInt=pannellum.viewer('RightPanoIntermediary', " + PanoDataIntermediary +");");将您的PanoDataIntermediary对象视为字符串,但它不是字符串,因此不能连接为字符串。这可能会导致您的浏览器崩溃。至少,它抛出了一个异常。

eval 的示例使用:

var myVariable = {a: 1, b:2, c:'test'};
var myVariableName = 'myVariable';
alert(eval(myVariableName).c);

注意:我不是在提倡使用eval这里。我只是想提供一些背景。

希望有帮助。

于 2018-12-05T09:08:35.503 回答