fabric 实现拖放添加
import { fabric } from 'fabric'; /** * 拖放功能 */ export class DragAndDrop { constructor(canvas) { // 添加必要元素 img $('body').append(`<img src="./assets/111.png" id='img' alt="">`); // 绑定拖拽事件 this.bindDragAndDrop(canvas); } /** * 绑定拖拽事件 */ bindDragAndDrop(canvas) { // 保存要添加到 canvas 信息 let temp = {}; let _self = this; // 监听画布 drop 事件 $('.upper-canvas').on('drop', function (e) { // 计算设置位置信息 // console.log(e.originalEvent); let pos = { left: e.originalEvent.offsetX - temp['m-offsetX'], top: e.originalEvent.offsetY - temp['m-offsetY'], }; switch (temp.type) { case 'IMG': _self.addToCanvasEle(canvas, temp, pos); break; } }); // 监听全局拖动事件 $(document).on('drag', function (e) { const type = e.target.tagName; // console.log(e); switch(type) { case 'IMG': temp['type'] = type; temp['ele'] = e.target; break; } }); $(document).on('mousedown', function (e) { // console.log(e); // 记录鼠标和图片位置关系 temp['m-offsetX'] = e.originalEvent.offsetX; temp['m-offsetY'] = e.originalEvent.offsetY; }); } /** * 第二种方法,ele * 同步加载会导致画布加载出现卡顿 * @param canvas * @param temp image 信息 * @param pos 位置信息 */ addToCanvasEle(canvas, temp, pos) { let img = new fabric.Image(temp.ele, pos); canvas.add(img); // 设置当前元素选中 canvas.setActiveObject(img); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现