javascript - 在对 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 函数的哪些替代方法进行相同的调用?
解决方案
好的,上面的回答让我意识到,我真的应该使用对象,而不是使用变量。例如...
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 的情况下工作。我需要一些时间来重新整理我现有的代码,看看它是否解决了浏览器崩溃问题。
再次感谢。
推荐阅读
- python - 如何在python控制台中隐藏输入
- maven - 为什么 *.war 文件在部署时没有在云 webapps 中解压?
- python - 如何比较python中的两个子进程输出值?
- c# - MVC .NET - 将多个模型传递给剃刀视图
- angularjs - Angularjs 和 moment.js - angularjs 没有显示正确的日期
- html - 导致奇怪外观的框架文本
- mysql - 如何分组并计算组的平均值
- mysql - Tornado websockets 与 mysql 和 redis
- scala - 如何在scala中模拟包含实用程序函数的目标文件
- angular - Angular CLI 两个捆绑包(一个用于生产,第二个用于开发)