【问题标题】:Change Gradient Color Stops in Fabric JS在 Fabric JS 中更改渐变颜色停止
【发布时间】:2015-11-07 07:56:31
【问题描述】:

我想在画布背景上应用渐变。 (一些文字写在前面的画布上) 我在画布上添加了相同大小的矩形并在该矩形上应用渐变。

var rect = new fabric.Rect({
          left: 0,
          top: 0,
          width: canvas.width,
          height: canvas.height,      
          selectable: false
        });
    canvas.add(rect);
    canvas.sendToBack(rect);        
    rect.setGradient('fill',{
      type: 'linear',
      x1: 0,
      y1: 0,
      x2: rect.width,
      y2: rect.height,
      colorStops: {
        0: $('#grdColor1').val(),
        1: $('#grdColor2').val()
      }
    });
    canvas.renderAll();
    canvas.setActiveObject(text);

#grdColor1 & #grdColor1 是允许用户应用颜色的输入字段。 这段代码工作正常。 但我想从颜色输入中进一步改变 ColorStops 的颜色。因此用户也可以在之后动态选择和更改渐变颜色。

我试过了,但它不起作用:

$("#grdColor1").on('change', function(){
    o = canvas.item(0); //rect is set to back
    o.colorStops({
            0: $('#grdColor1').val(),
            1: $('#grdColor2').val(),
          });
    canvas.renderAll();
});

也尝试了 rect.colorStops 但没有成功

更进一步,我想更改 setGradient 函数“线性”“径向”“x1”“x2”等的值。因此用户可以根据选择和颜色动态设置渐变选项。
方法是什么之后更改 setGradient 的值。

编辑 也试过了:

    $("#grdColor1").on('change', function() {
    rect.setGradient('fill',{
        colorStops: { //set colorStops again
            0: $('#grdColor1').val(),
            1: $('#grdColor2').val()
        }
    });
   });

我认为它没有选择矩形对象 因为我将它发送到后面并在之后选择了文本对象:

canvas.sendToBack(rect);
canvas.setActiveObject(text);

更新 1:

var r = canvas.item(0);
r.setGradient('fill',{  
    colorStops: {
        0: $('#grdColor1').val(),
        1: $('#grdColor2').val()
    }
});
canvas.renderAll();

现在正在选择矩形,但未正确应用渐变。 使用此代码,矩形背景仅更改为单色#grdColor1,即没有渐变效果。

【问题讨论】:

  • setGradient() 再次?
  • 我想改变已经设置的渐变的颜色。

标签: javascript jquery fabricjs


【解决方案1】:

grdColor1 更改时需要更改 setGradient,

$("#grdColor1").on('change', function(){;
   rect.setGradient('fill',{
      colorStops: { //set colorStops again
          0: $('#grdColor1').val(),
          1: $('#grdColor2').val()
      }
   });
    canvas.renderAll(); // now render
});

更新试试这个,

var r = canvas.item(0);
r.setGradient('fill',{
    type: 'linear',
    x1: 0,
    y1: 0,
    x2: r.width,
    y2: r.height,
    colorStops: {
       0: $('#grdColor1').val(),
       1: $('#grdColor2').val()
    }
});
canvas.renderAll();

【讨论】:

  • 谢谢 rohan 我也试过了,但我认为问题是代码没有正确选择 rect 对象。
  • 你的 rect 变量应该是全局的,在这种情况下。你能像在小提琴上一样为它展示一个在线演示吗?
  • 检查查询中的更新。现在可以选择矩形对象。改变反射,但只有矩形的背景颜色改变#grdColor1没有渐变效果出现。
  • 感谢它现在的工作。 x2: r.width, y2: r.height 是完美的解决方案。我正在检查另一个解决方案。 fabric.js 包含另一个函数 addColorStop
猜你喜欢
  • 1970-01-01
  • 2020-11-24
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2012-08-25
  • 2012-07-10
  • 2010-12-22
相关资源
最近更新 更多