当前位置: 首页 > 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用法
  • 在“三只手”上跳舞:公共政策的科学与艺术——读《市场、国家和民众:公共政策经济学》
  • 住建部:截至去年底常住人口城镇化率达到67%
  • 小米法务部:犯罪团伙操纵近万账号诋毁小米,该起黑公关案告破
  • 去年六成中小企业营收保持上升或持平,发展环境持续优化
  • 海外市场,押注中国无人驾驶龙头
  • 上海这个咖啡文化节首次“走出去”,率本土品牌亮相英国伦敦