我有一个网站,其中我使用javascript和pannellum应用程序接口加载多个360全景视图。
浏览器偶尔会崩溃,特别是在VR模式下的iPhone 6上,不同的DIVs中总共需要6个pannellum实例。
据我所知,浏览器在调用pannellum时崩溃,因为我传递给pannellum的数据包含在一个变量中,所以我从eval函数内部执行此操作。
下面是调用,加上随后的代码行,让我们知道全景图已加载。
eval("RightPanoInt=pannellum.viewer('RightPanoIntermediary', " + PanoDataIntermediary +");");
RightPanoInt.on("load", function() { LoadedRightPanoIntermediary(); });哪里
RightPanoInt是一个变量,我可以用它来检查是否加载了全景图
RightPanoIntermediary是全景图要加载到的DIV。
和
PanoDataIntermediary是包含pannellum API所需的数据/参数的变量。
例如
{"autoLoad":true,“俯仰”:0,“偏航”: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,"panorama":"002.jpg","preview":"BackgroundPaleGreen.jpg"}
下次调用时,数据将不同,因此参数必须在PanoDataIntermediary变量中。
除了eval函数之外,我还可以使用什么方法来进行相同的调用?
发布于 2018-12-06 05:34:03
好吧,上面的回答让我意识到,我真的应该使用对象,而不是使用变量。例如..。
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-05 17:08:36
你有没有试过这个(没有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的使用。我只是想提供一些背景信息。
希望这能有所帮助。
https://stackoverflow.com/questions/53628593
复制相似问题