我正在为360度浏览创建框架,并创建一些弹出窗口,这些弹出窗口会自动调整平面大小以适合其纹理。结果,我希望将事件侦听器添加到平面上,以查看何时加载其材质纹理或视频,然后将其调整为纹理的尺寸。我大部分情况下都使用图像(资产加载引起了一些问题,但是对此我有一些想法),但是视频不起作用。
我对“ materialtextureloaded”的常规事件侦听器不会针对视频触发,因此我尝试使用“ materialvideoloadeddata”,但这似乎也不起作用。当将视频资产用作纹理时,这些事件侦听器均不会触发,但是在使用图像时,加载的纹理将不会触发。
el.addEventListener('materialvideoloadeddata', function(){console.log("videodataloaded");});
el.addEventListener('materialtextureloaded', function(){console.log("materialtextureloaded");});
请注意,当我通过url而不使用资产加载系统设置材料来源时,会触发“ materialtextureloaded”事件。不过,所有视频都已加载到资产系统中,我想从那里加载它们。
触发“ materialvideoloadeddata”:
videoPlayer.setAttribute("material", "src: assets/video/myvideo.mp4');
不触发“ materialvideoloadeddata”:
videoPlayer.setAttribute("material", "src: #' + myvideoId);
我希望资产加载也会触发此事件,但不会。
答案 0 :(得分:0)
尝试收听实际上<video>
元素的loadeddata
事件。 https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/loadeddata_event
如果使用选择器,您已经拥有<video>
。
如果使用URL,则可以通过this.el.getObject3D('mesh').material.map.image
获得视频。