一、Vue + Fabric.js
canvas 一定要定義在 createApp 外面,否則會無法調整物件的大小或旋轉物件。
import { createApp } from "vue";
import { fabric } from 'fabric';
var canvas;
window.app = createApp({
mounted() {
canvas = new fabric.Canvas('canvas', {
preserveObjectStacking: true
});
canvas.loadFromJSON('json from database');
},
methods: {
save: function() {
axios
.put(route('your save route'), {
json: JSON.stringify(canvas)
})
.then(function(response) {
if (response.data.result) {
alert("儲存成功。");
} else {
alert("儲存失敗。");
}
});
}
}
}).mount("#app");
二、Vue + Fabric.js + Video
主要邏輯是為 fabric.Image 物件加上 video_src 屬性,記錄影片的來源網址。
import { createApp } from "vue";
import { fabric } from 'fabric';
var canvas;
window.app = createApp({
data() {
return {
creative: {},
creativeFilePath: '',
currentItemIndex: -1,
}
},
mounted() {
var obj = this;
canvas = new fabric.Canvas('canvas', {
preserveObjectStacking: true
});
canvas.loadFromJSON('json from database', function() {
canvas.renderAll.bind(canvas);
var objects = JSON.parse('json from database')['objects'];
for (var i = 0; i < objects.length; i++) {
if (objects[i].hasOwnProperty('video_src')) {
obj.addVideoElement(objects[i]);
}
}
});
fabric.util.requestAnimFrame(function render() {
canvas.renderAll();
fabric.util.requestAnimFrame(render);
});
},
methods: {
save: function() {
axios
.put(route('your save route'), {
json: JSON.stringify(canvas)
})
.then(function(response) {
if (response.data.result) {
alert("儲存成功。");
} else {
alert("儲存失敗。");
}
});
}
addVideoElement(object) {
var videoE = document.createElement('video');
videoE.muted = true;
var source = document.createElement('source');
source.src = object['video_src'];
videoE.appendChild(source);
videoE.addEventListener("loadedmetadata", function(e) {
videoE.width = this.videoWidth;
videoE.height = this.videoHeight;
var fab_video = new fabric.Image(videoE, object);
fab_video.toObject = (function(toObject) {
return function() {
return fabric.util.object.extend(toObject.call(this), {
video_src: this.video_src
});
};
})(fab_video.toObject);
fab_video.set('video_src', object['video_src']);
canvas.add(fab_video);
fab_video.getElement().play();
}, false);
}
}
}).mount("#app");
留言
張貼留言