前端 canvas 使用 fabric.js 如何做出限制显示的效果?

作者站长头像
站长
· 阅读数 4

举个例子,有一个画布,上面设定一个区域,图片在区域里面都可以显示,但移动图片到这个区域之外,就会隐藏看不到,这样的需求应该怎么做呢?

如果能给一个思路也是可以的,感谢各位大神的回答

个人的思路,给每个添加到 canvas 的图片加一个相同的裁剪

var logoImg = new Image();
logoImg.onload = function (img) {    
    var logo = new fabric.Image(logoImg, {
        angle: 10,
        width: 550,
        height: 190,
        left: 150,
        top: 50,
        scaleX: 0.25,
        scaleY: 0.25,
        clipName: 'logo',
        clipTo: function(ctx) { 
            return _.bind(clipByName, logo)(ctx) 
        }
    });
    canvas.add(logo);
};
logoImg.src = img01URL;
回复
1个回答
avatar
test
2024-07-07

其实方法很简单,重点其实就是注意一个参数 absolutePositioned 设定为 true 时就会相对于父容器,对父容器进行裁剪,否则就是裁剪图片本身。

const clipPath = new fabric.Rect({
    width: 300,
    height: 200,
    top: 200,
    left: 20,
    absolutePositioned: true
});
fabric.Image.fromURL('src.png', (img) => {
    img.clipPath = clipPath;
    img.set({
      top: 250,
      scaleX: 0.2,
      scaleY: 0.2
    })
    this.canvas.add(img);
}, { crossOrigin: 'anonymous' })

参考文档:http://fabricjs.com/clippath-part4

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容