【问题标题】:Pattern Repeat on Object Scaling in fabric JSFabric JS中对象缩放的模式重复
【发布时间】:2013-09-15 02:23:31
【问题描述】:
Is there any way to repeat the pattern inside an object in fabric JS.

假设我有一个用图案填充的矩形。我希望在缩放矩形时重复该模式。

现在当我缩放它时它正在缩放。

谢谢

【问题讨论】:

  • 目前没有对此的内置支持,但作为一种解决方法,您应该能够在调整对象大小时更改源图像尺寸。看看fabricjs.com/dynamic-patterns
  • 如果我在调整对象大小时使用对象缩放方法来捕获对象的宽度,我无法正确获取宽度值。我单击了鼠标并将对象的大小重新调整到某个位置,然后释放鼠标,它在这些操作上显示相同的值。只有在下一次单击时,我才会获得新值。代码示例代码:canvas.on('object:scaling',function(evt){ console.log(evt.target.currentWidth,evt.target.currentHeight); });
  • 你应该检查evt.target.scaleX & evt.target.scaleY

标签: design-patterns html5-canvas repeat fabricjs tiling


【解决方案1】:

@user2571818 我也在寻找这个,终于让它工作了。我们必须使用object:scaling 事件将对象缩放回 1x 并更改对象的大小,以使图案重复而不是缩放它。看这里

var canvas = new fabric.Canvas('c');
fabric.Object.prototype.transparentCorners = false;

  var padding = 0;

  fabric.Image.fromURL('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASdEVYdFNvZnR3YXJlAEdyZWVuc2hvdF5VCAUAAADLSURBVFhH7ZnBCoMwEET9/68URBHSNj0UolFoI+aQickKlT05jz0MGQIPkb2kadu3ta42ff/MTtLRazct55bajOMjO0lHr920vnWMMTGV0GuphVALoRaiqNV1dq4TLsdUIrTe+z0fw+ndmEo0w/D61AmXYyqh1179WjGVuNLyl0eohVALuZ8Wtzwgt9zyiNxSC6EWQi1EUYtbHpBbbnlEbqmFUAuhFqKoxS0PyC23PCK31EKohVAL0dXK3vLSOX0TnKZ1z8fw/3uiW37L27QIZwrV4gAAAABJRU5ErkJggg==', function(img) {

    img.scaleToWidth(50);
    var patternSourceCanvas = new fabric.StaticCanvas();
    patternSourceCanvas.add(img);
    patternSourceCanvas.renderAll();
    var pattern = new fabric.Pattern({
      source: function() {
        patternSourceCanvas.setDimensions({
          width: img.getScaledWidth() + padding,
          height: img.getScaledHeight() + padding
        });
        patternSourceCanvas.renderAll();
        return patternSourceCanvas.getElement();
      },
      repeat: 'repeat'
    }); 

    var rect = new fabric.Rect({
        width: 250,
        height: 250,
        fill: pattern,
        objectCaching: false
    });

    canvas.add(rect);
    rect.center().setCoords();

 });



canvas.on('object:scaling', function(e) {
  if (e.target != null) {
    console.log(e.target);
    var obj = e.target;
        var height = obj.height * obj.scaleY;
        var width = obj.width * obj.scaleX;
        obj.height = height;
        obj.width = width;
        obj.scaleX = 1;
        obj.scaleY = 1;
  }
});

JSFiddle: https://jsfiddle.net/dotriz/ajsdmg4s/

【讨论】:

    猜你喜欢
    • 2016-02-24
    • 2021-04-21
    • 2021-07-23
    • 2017-11-30
    • 2018-05-04
    • 2021-08-13
    • 2016-05-03
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多