JS画布内生成图标,并实现拖拽,连线,刷新

JS有现成的拖拽命令,但是只能实现简单的拖拽功能,下面演示的可以在画布的任意一个地方拖拽,并停留在画布的任意地方。

整个框架代码如下:

<html>
<head>
  <meta charset="UTF-8">
    <title>拖拽放置</title>
      <link rel="stylesheet" href="mycss.css" type="text/css" />
</head>
<body>
<div id="myMenu">
  <div>插入模块</div>
    <div onclick="copycontent('source.png')"><img src="./Image/source.png"></div>
    <div onclick="copycontent('Station.png')"><img src="./Image/Station.png"></div>
    <div onclick="copycontent('Drain.png')"><img src="./Image/Drain.png"></div>
    <div onclick="connectcontent()"><img src="./Image/Connector.png"></div>
  
</div>
<div id="container">
  <div id="heading">顶部菜单栏</div>
  <div id="content-body"></div>
  <div id="footing">底部状态栏</div>
</div>
<script src="./myjs.js" type="text/javascript"></script>
<script>

  //1.0 生成画笔
  const canvas = document.createElement('canvas')
  canvas.width =document.getElementById("content-body").clientWidth-4
  canvas.height = document.getElementById("content-body").clientHeight-4
  canvas.id = 'canvas'
  document.getElementById("content-body").appendChild(canvas)
  let ctx = canvas.getContext('2d') //画笔
  //1.1 双缓存绘图,避免闪烁
  const tempcanvas = document.createElement('canvas')
  tempcanvas.width = document.getElementById("content-body").clientWidth-4
  tempcanvas.height = document.getElementById("content-body").clientHeight-4
  tempcanvas.id = 'tempcanvas'
  let tempctx = tempcanvas.getContext('2d') //画笔

  //1.2  鼠标按下监听
  canvas.addEventListener('mousedown', e => {
    saveInfo(e)
  })

  //1.3 鼠标移动
  canvas.addEventListener('mousemove', e => {
    DrawPicture(e)
  })

  //1.4 鼠标抬起事件
  canvas.addEventListener('mouseup', e => {
    canvasInfo.status = statusConfig.IDLE
    canvas.style.cursor = ''
  })

  //1.5 鼠标离开事件
  canvas.addEventListener('mouseleave', e => {
    canvasInfo.status = statusConfig.IDLE
    canvas.style.cursor = ''
  })


</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/393314.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【详解】图的概念和存储结构(邻接矩阵,邻接表)

目录 图的基本概念&#xff1a; 图的存储结构 邻接矩阵&#xff08;GraphByMatrix&#xff09;&#xff1a; 基本参数&#xff1a; 初始化&#xff1a; 获取顶点元素在其数组中的下标 &#xff1a; 添加边和权重&#xff1a; 获取顶点的度&#xff1a; 打印图&#xf…

动态代理IP如何选择?

IP地址是由IP协议所提供的一种统一的地址格式&#xff0c;通过为每一个网络和每一台主机分配逻辑地址的方式来屏蔽物理地址的差异。根据IP地址的分配方式&#xff0c;IP可以分为动态IP与静态IP两种。对于大部分用户而言&#xff0c;日常使用的IP地址均为动态IP地址。从代理IP的…

CCF-A类VLDB’24 3月1日截稿!数据界的璀璨盛会等你投稿!

会议之眼 快讯 第50届VLDB( International Conference on Very Large Databases)即超大型数据库国际会议将于 2024 年 8月25日至29日在中国广州朗廷广场隆重举行&#xff01;VLDB大会是数据库领域的顶级学术盛会&#xff0c;而SIGMOD和ICDE则是与之齐名的另外两大数据库会议。这…

Android电量相关知识

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、 查看耗电情况3.1 注册广播 ACTION…

HBuilderX 插件开发指南(一):从插件开发到发布的完整流程

前端目前主流使用的IDE工具有VS Code、Sublime Text3、HBuilder X等等 本期我们主要了解HBuilder X&#xff0c;作为前端通用型开发工具&#xff0c;拥有可视化的操作方式&#xff0c;内置相关环境&#xff0c;开箱即用&#xff0c;无需配置nodejs等优点外&#xff0c;对uni-a…

notepad++打开文本文件乱码的解决办法

目录 第一步 在编码菜单栏下选择GB2312中文。如果已经选了忽略这一步 第二步 点击编码&#xff0c;红框圈出来的一个个试。我切换到UTF-8编码就正常了。 乱码如图。下面分享我的解决办法 第一步 在编码菜单栏下选择GB2312中文。如果已经选了忽略这一步 第二步 点击编码&#…

Vue项目启动过程全记录(node.js运行环境搭建)

一、安装node.js并配置环境变量 1、安装node.js 从Node.js官网下载安装包并安装。然后在安装后的目录&#xff08;如果是下载的压缩文件&#xff0c;则是解压缩的目录&#xff09;下新建node_global和node_cache这两个文件夹。 node_global&#xff1a;npm全局安装位置 node_…

Unity中,C#的事件与委托区别和经典实例

文章目录 实例1&#xff1a;委托&#xff08;Delegate&#xff09;的基本用法实例2&#xff1a;事件&#xff08;Event&#xff09;的声明与订阅实例3&#xff1a;Unity引擎中的委托实例 - UI Button.onClick实例4&#xff1a;事件&#xff08;Event&#xff09;的安全性实例5&…

上位机图像处理和嵌入式模块部署(cmake的使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 过去我们编写windows程序的时候&#xff0c;习惯上都是直接使用visual studio创建工程开发。而开发linux程序的时候&#xff0c;则是编写好c、cpp代…

C++ 离散化 算法 (详解)+ 例题

1、性质 把无限空间中有限的个体映射到有限的空间中去&#xff0c;以此提高算法的空间效率。通俗的说&#xff0c;离散化是在不改变数据相对大小的条件下&#xff0c;对数据进行相应的压缩。 适用范围&#xff1a;数的跨度很大&#xff0c;用的数很稀疏 例如&#xff1a;值域…

无形的伤害

有时候 我们往往很注意和陌生人或朋友之间的交往&#xff0c;关注情绪&#xff0c;语气&#xff0c;声调等等&#xff0c;生怕冲撞唐突了对方。 但往往会忽略身边人的感受&#xff0c;尤其是亲人和亲密的朋友&#xff0c;把他们对我们的关心当做理所当然的&#xff0c;和他们交…

Sora技术和影响分析

与现有生成工具比的优势 现有的文生图工具有Midjourney、Stable Diffusion、文心一格等&#xff0c;支持不同风格的内容生成&#xff0c;支持lora模型训练&#xff0c;此领域发展相对比较成熟。 而在文生视频领域&#xff0c;其难度相对更高&#xff0c;要求画面连续、清晰度…

OpenMVG(特征匹配、照片组重建点云、GPS位置信息、GMS)

目录 1 图像的特征匹配 2 图像中提取GPS位置信息 2.1 写入GPS信息到图像中 2.2 读取带有GPS的图像 3 SIFT/AKAZE/AKAZE_MLDB特征提取对比 4 GMS Filter 5 将球形全景图转换为6个透视视图 6 照片组重建点云 1 图像的特征匹配 #include "openMVG/features/feature.…

BUGKU-WEB source

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 看源码&#xff0c;看F12网络请求没有东西只能老老实实按照提示用Linux去扫描目录 相关工具 kali虚拟机安装gobuster 或者dirsearch 解题步骤 先查看源码&#xff1a; flag{Zmxhz19ub3RfaGvyzS…

Ubuntu22.04LTS编译Frida历史版本,环境配制及细节调整

经常使用Frida的朋友们可能会遇到Frida的各种问题需要自定义的&#xff0c;而这时候Frida的本地编译就显得很重要了。 最近一位朋友发现使用Frida14/15/16版的server只能连拉一定数量的设备&#xff0c;超过了frida-device-manager便不能连接设备。 实现没有办法&#xff0c;…

vue创建项目报:Error: command failed: yarn

我的文件在&#xff1a;C:\Users\Administrator 下 原来里面 useTaobaoRegistry 是否使用淘宝源 是 false &#xff0c;我改为true就好了 也可以 packageManager 默认安装工具 改为 npm 或 cnpm 原文连接&#xff1a;vue创建项目报&#xff1a;Error: command failed: yarn-阿…

Stable Diffusion教程——常用插件安装与测试(一)

前言 随着Stable Diffusion不断演进&#xff0c;越来越多的开发者开始涉足插件开发。尽管网络上存在大量教程&#xff0c;但它们通常零散分布&#xff0c;逐个学习和查找非常耗时&#xff0c;使人感觉每天都在劳累思考。这里总结了Stable Diffusion常用的插件安装与测试方法。…

搭建智能调度系统:同城代驾小程序的开发教学

当下&#xff0c;同城代驾服务越来越受到人们的青睐。为了满足市场需求&#xff0c;许多企业开始开发智能调度系统&#xff0c;以提高服务效率和用户体验。本文将介绍如何搭建一个智能调度系统&#xff0c;并以同城代驾小程序的开发为例进行详细教学。 第一步&#xff1a;需求…

科技守护大唐遗宝,预防保护传承千年

​ 一、“大唐遗宝——何家村窖藏出土文物展” 陕西历史博物馆的“唐朝遗宝——何家村窖藏出土文物展”算得上是博物馆展览的典范。展览不仅在于展现了数量之多、等级之高、种类之全&#xff0c;更在于对唐朝历史文化的深入揭露。 走入大唐财产展厅&#xff0c;好像穿越千年前…

The Captainz NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;The Captainz NFT Collection Dashboard The Captainz 是 Memeland 的旗舰系列&#xff0c;由 9,999 个实用性极强的 PFP 组成。持有者在 Memeland 宇宙中展开了一场神…