【发布时间】:2020-09-14 06:40:28
【问题描述】:
我在尝试在 fabric.js 画布上预览视频时遇到了一个问题。
FabricJS 版本已尝试:4.0.0-beta.8 和 3.6.3 均出现相同错误
它给出了错误提示
Uncaught TypeError: Cannot read property 'naturalWidth' of null :fabric.js:20490
我如何将视频添加到画布的代码:
let objects = slideData.getObjects();
for (var i = 0; i < objects.length; i++) {
if (objects[i].hasOwnProperty('videoUrl')) {
var videoElement = createVideoElement(objects[i]['videoUrl']); //this function returns a video element
var video = new fabric.Image(videoElement, {left: objects[i]['left'], top: objects[i]['top'], isBackgroundVideo: true});
slideData.add(video);//adding video to canvas.
video.sendBackwards();//setting video to be on the back so I can show text in front of it
console.log(slideData);
}
}
我如何尝试在画布上预览视频的代码:
let jsonData = JSON.stringify(slideData.toObject(propertiesToSave)); //this is an array of properties which we want to save which includes isBackgroundVideo: true
slideData.loadFromJSON(jsonData, slideData.renderAll.bind(slideData), function(o, object) { //loading saved canvas data from JSON
object.set('selectable', false);
object.set('cursorHover', 'default');
let objects = slideData.getObjects();
for (var i = 0; i < objects.length; i++) {
if (objects[i].hasOwnProperty('isBackgroundVideo')) {
objects[i].getElement().play();
fabric.util.requestAnimFrame(function render() {
slideData.renderAll();
fabric.util.requestAnimFrame(render);
});
}
}
});
但是当我执行这段代码时,fabric.js 给出了错误。
Uncaught TypeError: Cannot read property 'naturalWidth' of null :fabric.js:20490
我尝试了大多数解决方案,但都不起作用。我不确定这里有什么问题。如果我做错了什么或者这只是 fabric.js 中的一个错误
如果你们需要更多代码,那么我可以提供您需要的评论。谢谢
【问题讨论】:
-
如果您添加以下信息,这个问题可以得到改善: 1. fabric.js 版本 2. 完整的堆栈跟踪(不仅仅是错误消息) 3. 在您调用
slideData.dispose()的地方显示一段代码(在我的回答中,我假设你这样做) -
感谢您抽出宝贵时间评估问题并说明如何改进。我添加了我遇到问题的版本。但我没有堆栈跟踪,因为这个问题已经 5 个月了,我不再从事那个项目了。同样在我的代码中,我从未使用过
slideData.dispose(),所以我附加的代码中有问题。您的回答是信息性的,但很抱歉我不能接受它作为正确答案,因为我不希望其他人知道我的问题已通过您的回答得到解决。谢谢
标签: javascript html5-canvas html5-video fabricjs