• Fabricjs对Canvas画布和对象的事件监听


    场景

    Fabricjs一个简单强大的Canvas绘图库快速入门:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122850075

    在上面的基础上,怎样监听画布上鼠标按下、移动、抬起时的事件,以及画布上对象

    被选中、被移动、被旋转、被加入和被移除的事件。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    1、画布的事件监听

          //鼠标按下时事件
          canvas.on('mouse:down', function(options) {
            console.log("mouse:down"+options.e.clientX, options.e.clientY)
          })
    
          //鼠标移动时事件
          canvas.on('mouse:move', function(options) {
            console.log("mouse:move"+options.e.clientX, options.e.clientY)
          })
    
          //鼠标抬起时事件
          canvas.on('mouse:up', function(options) {
            console.log("mouse:up"+options.e.clientX, options.e.clientY)
          })

    2、对象的事件监听

          //绘制不规则图形
          var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z');
          path.set({ left: 120, top: 120,fill:'red' });
          //选中监听事件
          path.on('selected', function() {
            console.log('selected');
          });
    
          //对象移动监听事件
          path.on('moving', function() {
            console.log('moving');
          });
    
          //对象被旋转监听事件
          path.on('rotating', function() {
            console.log('rotating');
          });
    
          //对象被加入监听事件
          path.on('added', function() {
            console.log('added');
          });
    
          //对象被移除监听事件
          path.on('removed', function() {
            console.log('removed');
          });

    3、完整示例代码

    <template>
      <div>
        <div>
          <canvas id="c" width="800" height="800"></canvas>
        </div>
      </div>
    </template>
    
    <script>
    import { fabric } from "fabric";
    export default {
      name: "HelloFabric",
      data() {
        return {};
      },
      mounted() {
        this.init();
      },
      methods: {
        init() {
          // create a wrapper around native canvas element (with id="c")
          // 声明画布
          var canvas = new fabric.Canvas("c");
    
          //鼠标按下时事件
          canvas.on('mouse:down', function(options) {
            console.log("mouse:down"+options.e.clientX, options.e.clientY)
          })
    
          //鼠标移动时事件
          canvas.on('mouse:move', function(options) {
            console.log("mouse:move"+options.e.clientX, options.e.clientY)
          })
    
          //鼠标抬起时事件
          canvas.on('mouse:up', function(options) {
            console.log("mouse:up"+options.e.clientX, options.e.clientY)
          })
    
          // create a rectangle object
          // 绘制图形
          var rect = new fabric.Rect({
            left: 80, //距离画布左侧的距离,单位是像素
            top: 80, //距离画布上边的距离
            fill: "red", //填充的颜色
             20, //方形的宽度
            height: 20, //方形的高度
          });
    
          // "add" rectangle onto canvas
          //添加图形至画布
          canvas.add(rect);
    
          //添加图片
          fabric.Image.fromURL('images/light.png', function(oImg) {
            // scale image down, and flip it, before adding it onto canvas
            //缩小图像并翻转它
            oImg.scale(0.5).set('flipX', true);
            canvas.add(oImg);
          });
    
    
          //绘制不规则图形
          var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z');
          path.set({ left: 120, top: 120,fill:'red' });
          //选中监听事件
          path.on('selected', function() {
            console.log('selected');
          });
    
          //对象移动监听事件
          path.on('moving', function() {
            console.log('moving');
          });
    
          //对象被旋转监听事件
          path.on('rotating', function() {
            console.log('rotating');
          });
    
          //对象被加入监听事件
          path.on('added', function() {
            console.log('added');
          });
    
          //对象被移除监听事件
          path.on('removed', function() {
            console.log('removed');
          });
    
          canvas.add(path);
        },
      },
    };
    </script>
  • 相关阅读:
    死工资的缓慢呆板已不能适合这个新型的商业社会。
    java获取前一天时间SimpleDateFormat,java判断某个时间段
    设置 DNS,防止 DNS 污染,清除 DNS 缓存ipconfig /flushdns
    win7 怎么设置开机直接进入桌面? netplwiz 命令
    AWS免费云服务套餐申请步骤及常见问题
    阿里云自定义镜像可以免费保存,ECS实例到期后自定义镜像手动快照不会被删除
    php获取字符串长度函数strlen和mb_strlen
    PHP HTML混写,PHP中把大块HTML文本直接赋值给字符串变量的方法
    人工智能跟脑神经科学没有关系。没有出差错的机会,就没有进化的可能。要想自己把事情做成功,就需要弄清楚事物的本质。
    python GIL 全局锁,多核cpu下的多线程性能究竟如何?
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/15880220.html
Copyright © 2020-2023  润新知