fabric操作canvas绘图-(四)事件绑定

一,事件绑定的语法

    const canvas = new fabric.Canvas("canvas");
    canvas.setBackgroundColor("rgb(100,200,200)");
     //矩形
    const rect = new fabric.Rect({
      left: 0,
      top: 0,
      width: 200,
      height: 200,
      fill: 'pink',
    });
    canvas.on("mouse:down", (options) => {
      console.log(options.e.clientX, options.e.clientY);
      if (options.target) {
        //点击到图像对象上时
        console.log("an object was clicked!", options.target);
      }
    });
    canvas.add(rect)

也就是说事件绑定是通过如下的语法进行绑定的:

obj.on("事件名",(options)=>{
	//事件回调函数,options是接受到的参数
})

二,相关事件

事件的绑定,要区分是绑定在canvas画布上,还是画布上的图像对象上。

1,对于canvas画布,可以绑定的事件是:

和鼠标相关的事件有:

“mouse:down”,“ mouse:move”和“ mouse:up”,"mouse:over"
"mouse:out"

渲染完毕的生命周期事件:

“after:render”

选择相关事件:

“selection:created”:框选激活图像元素时触发
“before:selection:cleared”:取消选择的上一刻触发
“selection:cleared”:取消选择后触发
    const canvas = new fabric.Canvas("canvas");
    canvas.setBackgroundColor("rgb(100,200,200)");
     //矩形
    const rect = new fabric.Rect({
      left: 0,
      top: 0,
      width: 200,
      height: 200,
      fill: 'pink',
    });
    canvas.on("mouse:move", (options) => {
      console.log(options);
    });
    canvas.add(rect)
2,对于图像对象可以绑定的事件:
“modified”:修改时触发
“selected”:选中时触发
“moving”:移动时触发
“scaling”:缩放时触发
“rotating”:旋转时触发
“added”:添加对象时触发
“removed”:移除对象时触发

例如:

    const canvas = new fabric.Canvas("canvas");
    canvas.setBackgroundColor("rgb(100,200,200)");
     //矩形
    const rect = new fabric.Rect({
      left: 0,
      top: 0,
      width: 200,
      height: 200,
      fill: 'pink',
    });
    rect.on("selected", (options) => {
      console.log(options);
    });
    canvas.add(rect)

三,某对象鼠标hover事件

对于某对象鼠标划过,让它颜色变大一些的动画效果怎么写呢?

    const canvas = new fabric.Canvas("canvas");
    canvas.setBackgroundColor("rgb(100,200,200)");
     //矩形
    const rect = new fabric.Rect({
      left: 200,
      top: 200,
      width: 50,
      height: 50,
      originX: 'center',//调整中心点的X轴坐标
      originY: 'center',//调整中心点的Y轴坐标
      fill: 'pink',
    });
    //动画函数
    function animation(){
      rect.animate(
        "scaleX",
        rect.scaleX==2?1:2,
        {
          onChange:canvas.renderAll.bind(canvas),
          duration:200
        }
      )
    }
	//鼠标划入的事件对象上是没有的,但是画布有
    canvas.on("mouse:over", (options) => {
      if(options.target){
        animation()
      }
    });
    canvas.on("mouse:out", (options) => {
      if(options.target){
        animation()
      }
    });
    canvas.add(rect)

实现的效果:

请添加图片描述

要在Canvas上实现多图层事件绑定,需要按照以下步骤进行: 1. 创建各个图层 在Canvas上可以使用多个图层,每个图层上可以绘制不同的内容并添加不同的事件绑定。 2. 绑定事件 为每个图层绑定需要的事件,如click、mousemove等。 3. 事件处理 处理事件时,需要先判断当前事件发生在哪个图层上,然后再根据需要进行相应的处理。 4. 事件传递 如果事件在当前图层中无法处理,可以将事件传递给下一层进行处理,直到找到能够处理该事件的图层为止。 以下是一个示例代码,实现了在Canvas上创建多个图层,并绑定了不同的事件: ``` // 创建Canvas对象 var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext('2d'); // 创建图层 var layer1 = new Layer(); var layer2 = new Layer(); // 绑定事件 layer1.addEventListener('click', function(e) { // 处理点击事件 }); layer2.addEventListener('mousemove', function(e) { // 处理鼠标移动事件 }); // 添加图层到Canvas canvas.appendChild(layer1); canvas.appendChild(layer2); // 事件处理 canvas.addEventListener('click', function(e) { var x = e.clientX; var y = e.clientY; // 判断事件发生在哪个图层上 if (layer1.containsPoint(x, y)) { layer1.dispatchEvent(e); } else if (layer2.containsPoint(x, y)) { layer2.dispatchEvent(e); } }); ``` 在上述代码中,Layer对象用于创建图层,包含了addEventListner和dispatchEvent方法,用于绑定事件和处理事件Canvas对象包含了所有图层,通过判断事件发生的位置来决定哪个图层处理该事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值