当前位置: 首页 > news >正文

02-Canvas-fabric.ActiveSelection

fabric.ActiveSelection

fabric.ActiveSelection 用于表示当前选中的多个对象(即多选状态)。
当用户在画布上选择多个对象时,Fabric.js 会自动将这些对象包装在fabric.ActiveSelection 实例中,以便统一操作(如移动、缩放、旋转等)。
它具有分组的功能,默认临时分组

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Fabric.js Demo</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.2.4/fabric.min.js"></script>
</head>

<body>
    <canvas id="canvas" width="500" height="500" style="border: 1px solid #000;"></canvas>
    <script>
        const canvas = new fabric.Canvas('canvas');

        /* 
           fabric.ActiveSelection 用于表示当前选中的多个对象(即多选状态)。
           当用户在画布上选择多个对象时,Fabric.js 会自动将这些对象包装在一个 fabric.ActiveSelection 实例中,以便统一操作(如移动、缩放、旋转等)。
           它具有分组的功能,默认临时分组 
        */
        const rect1 = new fabric.Rect({ width: 100, height: 100, fill: 'red' });
        const rect2 = new fabric.Rect({ width: 100, height: 100, fill: 'blue', left: 150 });
        // 将两个矩形添加到画布
        canvas.add(rect1, rect2);

        // 创建 ActiveSelection
        const activeSelection = new fabric.ActiveSelection([rect1, rect2], {
            canvas: canvas,
        });

        // 将 ActiveSelection 设置为当前选中对象
        canvas.setActiveObject(activeSelection);
        canvas.requestRenderAll();

        // 监听 ActiveSelection 事件
        // 移动 ActiveSelection
        activeSelection.set({ left: 100, top: 100 });
        canvas.requestRenderAll();

        // 缩放 ActiveSelection
        activeSelection.set({ scaleX: 1.5, scaleY: 1.5 });
        canvas.requestRenderAll();

        // // 旋转 ActiveSelection
        activeSelection.set({ angle: 45 });
        canvas.requestRenderAll();

        // 永久分组
        const group = activeSelection.toGroup(); // 转换为永久分组
        canvas.discardActiveObject(); // 取消选择
        canvas.requestRenderAll();

    </script>
</body>

</html>

相关文章:

  • Rabit
  • Uniapp 开发 App 端上架用户隐私协议实现指南
  • Vuetify v-data-table footer文本适配中文
  • Redis基本命令手册——五大类型
  • 便捷搞定计算机名、IP 与 Mac 地址修改及网卡问题的软件
  • 【Erdas实验教程】015:哨兵二号卫星数据简介及下载方法
  • 将pdf或者word转换成base64格式
  • 设计心得——多态
  • 沐数科技数据开发岗笔试题2025
  • Unity开发中对象池设计与使用
  • Ansible 自动化运维
  • Docker容器命令速查表
  • Leetcode 刷题笔记1 动态规划part11
  • ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值
  • Linux系统之less命令的基本使用
  • 【HTML】三、表单与布局标签
  • Linux磁盘与存储管理:从“空间不足”到“存储大亨”
  • C 语言实现彩票模拟:指针与数组的巧妙运用
  • SonarQube安装及结合IDEA使用详细教程(2025适配版)
  • 前端高级CSS用法
  • 深圳宝安区一宗涉宅用地中止出让,起始总价86.27亿元
  • 连演三场,歌剧《义勇军进行曲》在上海西岸大剧院上演
  • 财政部农业农村司司长吴奇修接受纪律审查和监察调查
  • 国家税务总局:“二套转首套”可以享受贷款利息个税专项扣除
  • 人社部:就业政策储备充足,将会根据形势变化及时推出
  • 伊朗港口爆炸已造成25人死亡,灭火行动已近尾声