Fabric.js在Canvas上的图像上分层文本

时间:2015-12-25 08:51:40

标签: javascript html5 canvas html5-canvas fabricjs

所以,我刚刚开始与HTML5canvases合作,我目前正与fabric.js合作。但是,我遇到了一个问题,在过去12个小时尝试不同的事情之后,我决定来这里寻求帮助,所以这就是:

使用fabric.js,

我已经将一堆图像分层以实现我想要的效果,但现在我希望能够使用fabric.js来覆盖这些图像。我只能让它在写入点写入所有这些,但是错误的z位置(这些单词最终都在图像下方,我认为背景图像也是如此 - 单词快速闪烁然后消失),通过放置它在回调中,所有六个文本对象都在完全相同的位置结束。那么,我该怎么做呢?我已经尝试了bringToFront(), sendToBack(), moveTo(),并且有一个功能,它将它插入到现场,但我忘了它。但是,我很有可能最终错误地使用它们,因为我对fabric.js很新。

以下是基本代码的链接:http://pastebin.com/TxNCKAkD

但是,我想我认为问题所在的主要地方是:

text[i] = new fabric.Text("ChiefKeef", {
       top: (5+(65*topShift)),
       left: leftShift+15,
      hasControls: false,
       fill: "orange",
      fontFamily: 'pokeText'
        });
canvas.add(text[i]);

上面的一个是for循环,每个add都放在一个数组中 在这里,这是一个更简单的地方:

var tbText = new fabric.Text("Sentence", {
    top: 210,
    left: 15,
    hasControls: false,
    fill: "#32CD32",
    fontFamily: 'pokeText'
});
 canvas.add(tbText);

这两种方法都有效,但无论我做了什么,文本都放在所有图像的后面。那么,我如何在已放置的图像上方显示此文本?感谢阅读,希望有人可以帮助我。如果我遗漏了任何内容,或者您​​需要额外的信息,我很乐意提供:)

1 个答案:

答案 0 :(得分:1)

我添加了canvas.sendToBack(y);& canvas.sendToBack(textBox);进入函数体,在其中添加面板png&文本框png,它的工作原理。 i-text 对象' ChiefKeef '在窗格图像上方。

我已经制作了一个带有样本图像的jsfiddle,因为我无法重现你的,但你可以看到结果(通过按猴子:))。 http://jsfiddle.net/5KKQ2/495/

片段:

x[i] = new
fabric.Image.fromURL("https://t2.ftcdn.net/jpg/00/97/16/03/500_F_97160389_tVczY4dIrtaRFkSMhV9elnU0NBMVJ1Y3.jpg", function(y){
    //just add canvas.sendToBack(y);
    canvas.add(y);canvas.sendToBack(y);
}, {
    top: (5+(65*topShift)),
    left: leftShift,
        height:65,
        width:195,
    borderColor: "blue",
    hasControls: true,
    lockMovementX: true,
    lockMovementY: true
});
var textBox = new fabric.Image.fromURL("https://t2.ftcdn.net/jpg/00/90/00/97/500_F_90009771_mWttXqopbyZZMVcyuXd5y2iQeeDK9NJm.jpg", function(textBox){
    //just add canvas.sendToBack(textBox);
    canvas.add(textBox);canvas.sendToBack(textBox);
}, {
    top: 200,
    left: 5,
        height:50,
        width:300,
    borderColor: "blue",
    hasControls: false,
    lockMovementX: true,
    lockMovementY: true
});

希望有所帮助,祝你好运。