惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
D
DataBreaches.Net
博客园_首页
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
罗磊的独立博客
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog
D
Docker
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
G
Google Developers Blog
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 叶小钗
M
MIT News - Artificial intelligence
Recent Announcements
Recent Announcements

博客园 - Zion0707

Codex接入DeepSeek token实现对话与操作,so easy! Openclaw只能聊天不能操作解决方案 Ubuntu从零搭建Openclaw Openclaw安装问题记录 React数字滚动,增加或减少效果 react hooks实现对元素拖拽及鼠标滚轮缩放 前端实现图片文字识别并提取 ECharts实现两条曲线数据比较,数据高出区域高亮显示 canvas实现视频播放并支持自动播放 fabricjs实现虚线流动动画效果 React国际化方案及示例 fabricjs如何导入echarts 萤石云视频监控和回放方案 React仿photoshop参考线功能 react-router-dom v6 使用 “DatePicker”不能用作 JSX 组件。 Element plus的tree组件实现单选和搜索功能 16进制相关操作方法 js 版 AES-128 算法加解密 js 版 React 下拉多选,全选/全不选功能组件
fabricjs元素对齐方式实现
Zion0707 · 2023-03-15 · via 博客园 - Zion0707
import React, { useEffect } from 'react';
import { fabric } from 'fabric';
import './index.less';

window.__cvs = null;
const Test = () => {
    useEffect(() => {
        // 初始化画布
        window.__cvs = new fabric.Canvas('canvas', {
            backgroundColor: '#fff',
            width: 400,
            height: 400,
        });

        // 添加三个不同颜色矩形元素
        const rect1 = new fabric.Rect({
            left: 100,
            top: 100,
            width: 70,
            height: 70,
            fill: '#E64B47',
        });

        const rect2 = new fabric.Rect({
            left: 150,
            top: 150,
            width: 60,
            height: 60,
            fill: '#E1D184',
        });

        const rect3 = new fabric.Rect({
            left: 200,
            top: 200,
            width: 50,
            height: 50,
            fill: '#895F41',
        });

        window.__cvs.add(rect1, rect2, rect3);
    }, []);

    return (
        <div className="test">
            <canvas id="canvas"></canvas>
            <div className="btns">
                <button
                    type="button"
                    onClick={() => {
                        const activeObjects = window.__cvs.getActiveObject();
                        activeObjects?._objects?.forEach((el) => {
                            const left = activeObjects.width / 2 - activeObjects.width;
                            el.set({
                                left,
                            });
                        });
                        window.__cvs.renderAll();
                    }}
                >
                    左对齐
                </button>

                <button
                    type="button"
                    onClick={() => {
                        const activeObjects = window.__cvs.getActiveObject();
                        activeObjects?._objects?.forEach((el) => {
                            const left = activeObjects.width - el.width - activeObjects.width / 2;
                            el.set({
                                left,
                            });
                        });
                        window.__cvs.renderAll();
                    }}
                >
                    右对齐
                </button>

                <button
                    type="button"
                    onClick={() => {
                        const activeObjects = window.__cvs.getActiveObject();
                        activeObjects?._objects?.forEach((el) => {
                            const top = activeObjects.height / 2 - activeObjects.height;
                            el.set({
                                top,
                            });
                        });
                        window.__cvs.renderAll();
                    }}
                >
                    顶对齐
                </button>

                <button
                    type="button"
                    onClick={() => {
                        const activeObjects = window.__cvs.getActiveObject();
                        activeObjects?._objects?.forEach((el) => {
                            const top = activeObjects.height - el.height - activeObjects.height / 2;
                            el.set({
                                top,
                            });
                        });
                        window.__cvs.renderAll();
                    }}
                >
                    底对齐
                </button>

                <button
                    type="button"
                    onClick={() => {
                        const activeObjects = window.__cvs.getActiveObject();
                        activeObjects?._objects?.forEach((el) => {
                            const left = (activeObjects.width - el.width) / 2 - activeObjects.width / 2;
                            el.set({
                                left,
                            });
                        });
                        window.__cvs.renderAll();
                    }}
                >
                    垂直居中对齐
                </button>

                <button
                    type="button"
                    onClick={() => {
                        const activeObjects = window.__cvs.getActiveObject();
                        activeObjects?._objects?.forEach((el) => {
                            const top = (activeObjects.height - el.height) / 2 - activeObjects.height / 2;
                            el.set({
                                top,
                            });
                        });
                        window.__cvs.renderAll();
                    }}
                >
                    水平居中对齐
                </button>
            </div>
        </div>
    );
};

export default Test;