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

fabric js双击弹出菜单, 双击弹出输入框 修改文字 群组对象

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试1</title><style type="text/css">body {background-color: #ccc;float: left;}#main {background-color: #fff;border: 1px solid #000;}.context-menu {position: absolute;background-color: #fff;border: 1px solid #ccc;padding: 5px;display: none;width: 200px;height: 200px;}</style>
</head>
<body>
<canvas id="main" width="800" height="800"></canvas>
<div id="contextMenu" class="context-menu"><ul><li>删除</li></ul>
</div><button id="button">删除</button><script src="fabric.min.js"></script>
<script type="text/javascript">// 在这里放置您的代码var canvas = new fabric.Canvas('main');var rect = new fabric.Rect({left: 100,top: 100,fill: 'red',width: 300,height: 200});rect.on('mousedblclick', e => {var contextMenu = document.getElementById('contextMenu');contextMenu.style.left = e.pointer.x + 'px';contextMenu.style.top = e.pointer.x + 'px';// 显示菜单contextMenu.style.display = 'block';contextMenu.addEventListener('mouseleave', e => {contextMenu.style.display = 'none';});});var circle = new fabric.Circle({radius: 50,fill: 'green',left: 200,top: 100,});var triangle = new fabric.Triangle({left: 100,top: 100,fill: 'blue',width: 80,height: 100});fabric.Image.fromURL('./T.png', function (img) {img.left = 200;img.scale(0.1);canvas.add(img)});/*var group = new fabric.Group([],{});group.addWithUpdate(rect);group.addWithUpdate(circle);canvas.add(group);*/// 创建文字对象var text = new fabric.Text('Hello, World!', {left: 50,top: 50,fontSize: 24,fontWeight: 'bold',fontFamily: 'Arial',fill: 'black'});text.on('mousedblclick', e => {var input = document.createElement('input');// 设置 input 元素的位置input.style.left = text.left + 'px';input.style.top = text.top + 'px';input.style.position = 'absolute';input.type = 'text';// 监听键盘按键事件input.addEventListener('keydown', function (e) {if (e.keyCode === 13) {// 如果按下的是回车键 (keyCode 为 13)// 销毁 input 元素input.parentNode.removeChild(input);// 获取输入的内容var inputValue = input.value;console.log('输入的内容是:', inputValue);// 在这里进行进一步的处理// 阻止默认行为e.preventDefault();text.text = input.value;canvas.renderAll();}});document.body.appendChild(input);// 自动聚焦到 input 元素input.focus();})canvas.add(text);canvas.add(rect);canvas.add(circle);canvas.add(triangle);function group() {// 获取选中的对象数组var activeObjects = canvas.getActiveObjects();if (activeObjects.length >= 2) {var clonedObjects = [];activeObjects.forEach(function (object) {clonedObjects.push(fabric.util.object.clone(object));});var left = clonedObjects[0].left;var top = clonedObjects[0].top;console.log('left', left)console.log('top', top)for (let i = 1; i < clonedObjects.length; i++) {left = clonedObjects[i].left < left ? clonedObjects[i].left : left;top = clonedObjects[i].top < top ? clonedObjects[i].top : top;}console.log('left', left)console.log('top', top)// 创建一个新的组var group = new fabric.Group(clonedObjects);// 从画布中移除已选中的对象canvas.discardActiveObject();canvas.remove.apply(canvas, activeObjects);// 将组对象添加到画布canvas.add(group);canvas.setActiveObject(group);group.left = left;group.top = top;canvas.requestRenderAll();}}</script>
</body>
</html>

相关文章:

fabric js双击弹出菜单, 双击弹出输入框 修改文字 群组对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>测试1</title><style type"text/css">body {background-color: #ccc;float: left;}#main {background-color: #fff;border: 1px…...

路由器工作原理

路由器原理 路由概述 路由&#xff1a;跨越从源主机到目标主机的一个互联网络来转发数据包的过程。&#xff08;为数据包选择路径的过程&#xff09; 作用&#xff1a;路由器是连接不同网段的。 转发依据&#xff1a; 路由表&#xff1a;路径选择全看路由表&#xff0c;根…...

在centos 7系统docker上构建mysql 5.7

一、VM上已经安装centos 7.9&#xff0c;且已完成docker的构建 二、安装mysql5.7 安装镜像&#xff1a;[rootlocalhost lll]# docker pull mysql:5.7 查看镜像[rootlocalhost lll]# docker images 根据镜像id构建mysql容器&#xff0c;且分配端口号[rootlocalhost lll]# dock…...

数据库的介绍和分类

目录 一、数据库的介绍和分类 二、命令行客户端 三、数据操作 四、查询的基本操作 五、条件查询 六、分组和聚合 资料获取方法 一、数据库的介绍和分类 数据库&#xff1a;长期存储在计算机内、有组织的数据集合 数据库的分类&#xff1a; 关系型数据库 以表格的形式…...

职责链模式——请求的链式处理

1、简介 1.1、概述 很多情况下&#xff0c;在一个软件系统中可以处理某个请求的对象不止一个。例如SCM系统中的采购单审批&#xff0c;主任、副董事长、董事长和董事会都可以处理采购单&#xff0c;他们可以构成一条处理采购单的链式结构。采购单沿着这条链进行传递&#xff…...

docker中涉及的挂载点总结

文章目录 1.场景描述2. 容器信息在主机上位置3. 通过docker run 命令4、通过Dockerfile创建挂载点5、容器共享卷&#xff08;挂载点&#xff09;6、最佳实践&#xff1a;数据容器 1.场景描述 在介绍VOLUME指令之前&#xff0c;我们来看下如下场景需求&#xff1a; 1&#xff…...

elasticsearch 官方优化建议

.一般建议 a.不要返回过大的结果集。这个建议对一般数据库都是适用的&#xff0c;如果要获取大量结果&#xff0c;可以使用search_after api&#xff0c;或者scroll &#xff08;新版本中已经不推荐&#xff09;。 b.避免大的文档。 2. 如何提高索引速度 a.使用批量请求。为了…...

Kubernetes(K8s)从入门到精通系列之五:K8s的基本概念和术语之应用类

Kubernetes K8s从入门到精通系列之五:K8s的基本概念和术语之应用类 一、Service与Pod二、Label与标签选择器三、Pod与Deployment四、Service的ClusterIP地址五、Service的外网访问问题六、有状态的应用集群七、批处理应用八、应用配置问题九、应用的运维一、Service与Pod Ser…...

DevOps(四)

CD(二) 1. CDStep 1 - 上传代码Step 2 - 下载代码Step 3 - 检查代码Step 4 - 编译代码Step 5 - 上传仓库Step 6 - 下载软件Step 7 - 制作镜像Step 8 - 上传镜像Step 9 - 部署服务2. 整体预览2.1 预览1. 修改代码2. 查看sonarqube检查结果3. 查看nexus仓库4. 查看harbor仓库5.…...

Element-plus侧边栏踩坑

问题描述 el-menu直接嵌套el-menu-item菜单&#xff0c;折叠时不会出现文字显示和小箭头无法隐藏的问题&#xff0c;但是实际开发需求中难免需要把el-menu-item封装为组件 解决 vue3项目中嵌套两层template <template><template v-for"item in list" :k…...

支持多种通信方式和协议方便接入第三方服务器或云平台

2路RS485串口是一种常用的通信接口&#xff0c;可以支持Modbus Slave协议&#xff0c;并可接入SCADA、HMI、DSC、PLC等上位机。它还支持Modbus RTU Master协议&#xff0c;可用于扩展多达48个Modbus Slave设备&#xff0c;如Modbus RTU远程数据采集模块、电表、水表、柴油发电机…...

使用 OpenCV 进行图像模糊度检测(拉普拉斯方差方法)

写在前面 工作中遇到&#xff0c;简单整理人脸识别中&#xff0c;对于模糊程度较高的图像数据&#xff0c;识别率低&#xff0c;错误率高。虽然使用 AdaFace 模型&#xff0c;对低质量人脸表现尤为突出。但是还是需要对 模糊程度高的图像进行丢弃处理当前通过阈值分类&#xff…...

神经网络简单介绍

人工神经网络(artififial neural network) 简称神经网络&#xff0c;它是一种模仿生物神经网络结构和功能的非线性数学模型。 神经网络通过输入层接受原始特征信息&#xff0c;再通过隐藏层进行特征信息的加工和提取&#xff0c;最后通过输出层输出结果。 根据需要神经网络可以…...

16位S912ZVML32F3MKH、S912ZVML31F1WKF、S912ZVML31F1MKH混合信号MCU,适用于汽车和工业电机控制应用。

S12 MagniV微控制器是易于使用且高度集成的混合信号MCU&#xff0c;非常适合用于汽车和工业应用。S12 MagniV MCU提供单芯片解决方案&#xff0c;是基于成熟的S12技术的完整系统级封装 (SiP) 解决方案&#xff0c;在整个产品组合内软件和工具都兼容。 S12 MagniV系统级封装 (S…...

力扣 509. 斐波那契数

题目来源&#xff1a;https://leetcode.cn/problems/fibonacci-number/description/ C题解1&#xff1a;根据题意&#xff0c;直接用递归函数。 class Solution { public:int fib(int n) {if(n 0) return 0;else if(n 1) return 1;else return(fib(n-1) fib(n-2));} }; C题…...

使用 DolphinDB TopN 函数探索高效的Alpha因子

DolphinDB 已经有非常多的窗口计算函数&#xff0c;例如 m 系列的滑动窗口计算&#xff0c;cum 系列累计窗口计算&#xff0c;tm 系列的的时间窗口滑动计算。但是所有这类函数都是对窗口内的所有记录进行指标计算&#xff0c;难免包含很多噪音。 DolphinDB 的金融领域用户反馈…...

超聚变和厦门大学助力兴业银行构建智慧金融隐私计算平台,助力信用卡业务精准营销...

兴业银行与超聚变数字技术有限公司、厦门大学携手&#xff0c;发挥产学研用一体化整体优势联合建设&#xff0c;厦门大学提供先进的算法模型及科研能力&#xff0c;超聚变提供产品解决方案及工程能力&#xff0c;兴业银行提供金融实践能力&#xff0c;三方发挥各自领域优势&…...

docker 的compose安装

1. Docker Compose 环境安装 Docker Compose 是 Docker 的独立产品&#xff0c;因此需要安装 Docker 之后在单独安装 Docker Compose docker compose 实现单机容器集群编排管理&#xff08;使用一个模板文件定义多个应用容器的启动参数和依赖关系&#xff0c;并使用docker co…...

JavaScript---事件对象event

获取事件对象&#xff1a; 事件对象&#xff1a;是个对象&#xff0c;这个对象里有事件触发时的相关信息&#xff0c;在事件绑定的回调函数的第一个参数就是事件对象&#xff0c;一般命名为event、ev、e eg: 元素.addEventListener(click,function (e){}) 部分常用属性&…...

Day 15 C++对象模型和this指针

目录 C对象模型 类内的成员变量和成员函数分开存储 总结 this指针 概念 示例 用途 当形参和成员变量同名时 在非静态成员函数中&#xff0c;如果希望返回对象本身 例子 空指针访问成员函数 示例 const修饰成员函数 常函数&#xff08;const member function&…...

MySQL事务与锁机制深度解析

摘要&#xff1a;事务与锁是 MySQL 并发控制的两大基石。本文从 ACID 四大特性出发&#xff0c;深入讲解 InnoDB 的 MVCC 多版本并发控制机制、四种隔离级别下的并发问题、七种锁类型&#xff08;从表锁到行锁、间隙锁、Next-Key 锁&#xff09;&#xff0c;以及死锁的产生原因…...

Python初学者项目练习23--计算圆的面积

一、练习题目 定义一个函数&#xff0c;这个函数用于计算并返回给定半径的圆的面积&#xff08;要求结果保留两位小数&#xff09; 二、代码 1.初始版本 代码如下&#xff1a; def area(r):"""作用&#xff1a;用于计算并返回给定半径的圆的面积&#xff08;要求…...

【项目实训(个人8)】

继续进行法律文书智能摘要系统的开发&#xff0c;新增了几个功能&#xff0c;并优化了用户体验概述本次开发为法律文书智能摘要系统新增了两项核心功能。其一是摘要版本管理&#xff0c;支持同一文档的多版本摘要生成、存储、对比和回滚。用户在生成摘要时&#xff0c;系统自动…...

Esp32Robot入门04-服务端架构与本地Docker拉起(实战进阶:手把手教你用Docker部署小智助手服务端)

Esp32Robot入门04-服务端架构与本地Docker拉起&#xff08;实战进阶&#xff1a;手把手教你用Docker部署小智助手服务端&#xff09; &#x1f4cc; 文章简介&#xff1a; 在AI智能硬件开发中&#xff0c;ESP32-S3因高性价比备受青睐&#xff0c;但面对千亿参数的本地大模型与高…...

太顶了!输入主题,这几款AI论文软件自动生成毕业论文初稿!

毕业季论文焦虑&#xff1f;还在为选题、查资料、写大纲、润色修改熬夜到凌晨&#xff1f;别担心&#xff0c;现在只需输入主题&#xff0c;几款AI论文工具就能自动生成图文并茂的毕业论文初稿&#xff0c;从开题到定稿全流程搞定&#xff01;千笔AI、ThouPen、豆包、DeepSeek、…...

【ElevenLabs丹麦文语音实战指南】:20年AI语音工程师亲测的5大本地化避坑法则与自然度调优秘籍

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs丹麦文语音本地化实战的底层逻辑与认知重构 ElevenLabs 的语音合成能力并非仅依赖于多语言模型堆叠&#xff0c;其丹麦文&#xff08;da-DK&#xff09;本地化本质是声学特征解耦、韵律迁移与…...

武汉大学等高校联手揭露AI助手的“记忆盲区“:它们真的记得你吗?

这项由武汉大学、香港中文大学和香港科技大学联合开展的研究以预印本形式于2026年5月发表&#xff0c;论文编号为arXiv:2605.06527&#xff0c;有兴趣深入了解的读者可以通过该编号查询完整论文。你有没有试过这样一件事&#xff1a;你和手机里的AI助手聊了很久&#xff0c;告诉…...

5步打造你的英雄联盟智能游戏助手:从零到效率革命的完整指南

5步打造你的英雄联盟智能游戏助手&#xff1a;从零到效率革命的完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟中繁琐…...

写给前端的 CANN-ops-fft:昇腾FFT算子库到底是啥?

写给前端的 CANN-ops-fft&#xff1a;昇腾FFT算子库到底是啥&#xff1f; 之前做信号处理&#xff0c;兄弟问我&#xff1a;“哥&#xff0c;我想做频域分析&#xff0c;昇腾上有现成的 FFT 库吗&#xff1f;” 好问题。今天一次说清楚。 ops-fft 是啥&#xff1f; ops-fft Op…...

终极免费跨平台方案:draw.io桌面版完美编辑Visio文件

终极免费跨平台方案&#xff1a;draw.io桌面版完美编辑Visio文件 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 还在为不同操作系统间的Visio文件兼容性而烦恼吗&#xff1f;当…...