首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JavaScript透明画布

JavaScript透明画布
EN

Stack Overflow用户
提问于 2022-03-29 20:52:12
回答 2查看 266关注 0票数 0

我使用这个jQuery插件在画布上自由作画。

我想清除画布以重新绘制,但是在我重新绘制之后,当我单击内部画布进行重绘时,我清除的旧绘图再次出现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$('#canvasFirst').sketch();
$('button').on("click", (evt) => {
  var canvas = document.getElementById('canvasFirst');
  let context = canvas.getContext('2d');
  context.clearRect(0, 0, canvas.width, canvas.height);
});
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
canvas { border: 1px solid; vertical-align: top }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/mobomo/sketch.js@master/lib/sketch.min.js"></script>
<p>Draw on the below canvas, then press "clear" and try to draw again.</p>

<canvas id="canvasFirst">
</canvas>
<button>clear</button>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-29 23:18:23

这个插件将所有绘图命令存储在一个actions数组中,在每个redraw上,它将遍历整个列表并再次绘制完整的内容。(这样可以避免笔划中有洞)。

医生们很难掌握,但是您可以通过.sketch("options", value)方法设置options的内容。

正如本期中所暗示的,将其设置为空数组将因此删除所有前面的命令。你所要做的就是重新绘制整个场景,现在是空的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const $canvas = $('#canvasFirst');
$canvas.sketch();
$('button').on("click", (evt) => {
  $canvas.sketch("actions", []);
  $canvas.sketch("redraw");
});
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
canvas { border: 1px solid; vertical-align: top }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/mobomo/sketch.js@master/lib/sketch.min.js"></script>
<p>Draw on the below canvas, then press "clear" and try to draw again.</p>

<canvas id="canvasFirst">
</canvas>
<button>clear</button>

票数 0
EN

Stack Overflow用户

发布于 2022-03-29 22:10:51

您可以尝试将画布的状态保存为blob。例如,作为图像/png。这里有两件坏事:

  1. 小小的不便。将blob转换为映像和返回的方法是异步的。必须兑现承诺。
  2. 速度。我强烈怀疑这个解决方案是否适合于需要速度游戏、视频等的任务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

const saveCanvasState = (canvas) => {
  const ctx = canvas.getContext('2d');
  ctx.save(); // save state
  let blob;

  return new Promise((r) => {
    canvas.toBlob( // toBlob is async method
      (b) => {
        blob = b;

        r(() =>
          new Promise((r) => {
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            ctx.restore();

            const img = new Image();

            img.addEventListener('load', () => {
              URL.revokeObjectURL(img.src);
              ctx.drawImage(img, 0, 0);
              r();
            });

            img.src = URL.createObjectURL(blob);
          }));
      },
      'image/png',
      1
    );
  });
};

ctx.fillStyle = 'green';
ctx.fillRect(10, 10, 100, 100);

saveCanvasState(canvas).then((restore) => {
  ctx.fillStyle = 'black';
  ctx.fillRect(150, 40, 100, 100);
  ctx.fillRect(100, 40, 100, 100);

  restore().then(() => {
    console.log('restored, can draw');
  });
});
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<canvas id="canvas"></canvas>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71671663

复制
相关文章
JavaScript中用画布canvans做贪吃蛇
更多内容请见原文,文章转载自:https://blog.csdn.net/weixin_44519496/article/details/118540838
马克社区
2022/04/12
2160
Canvas画布
Canvas(画布)组件为Tkinter的图形绘制提供了基础 Canvas是一个通用的组件,通常用于显示和编辑图形。可以用它来绘制线段、圆形、多边形,甚至是绘制其他组件,创建图形编辑器,并实现各种自定义的小组件。
大白熊
2021/12/23
1.3K0
python canvas画布
canvas = Canvas(width=525, height=300, bg='white') # 0,0 is top left corner canvas.pack(expand=YES, fill=BOTH) # increases down, right
用户5760343
2022/05/13
1.4K0
python canvas画布
canvas简易画布
今天学习了canvas,利用它做了一个简易版的画板,校验自己所学的知识,分享出来以供大家学习指教。先上效果图。
马克社区
2022/04/28
1.1K0
canvas清除画布-ZBrush中如何清除画布中多余图像
  ZBrush是一款数字雕刻与绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维行业。它的简洁化、智能化和人性化的设计无不让众多用户所折服。刚接触它的用户可能会因为找不到相关命令或不熟悉而觉得它有些复杂canvas清除画布,那么,在ZBrush®软件中如何对多余模型进行清除的操作有些刚接触的用户会找不清,本文就删除画布中的多余模型做详细讲解。
宜轩
2022/12/29
2.4K0
flutter的画布认识
下图代码详见: p03_canvas/06_like_circle/paper.dart#_drawArcDetail
用户1974410
2022/09/20
3.2K0
flutter的画布认识
JointJS 拖动画布
效果 画布外套一层画板和一层画框,拖动画布时让画板在画框中滚动 源码 <div id="wrap" style="overflow: auto;height:300px;width:300px;background-color: darkgrey"> <div id="board" style="padding:20px"> <div id="paper"></div> </div> </div> <script> const paper = new joint.dia
路过君
2021/12/07
2K0
JointJS 拖动画布
我的精益画布
商家推广是互联网重点关注的方向之一,现在也有很多产品、解决方案存在。但对于小商家来说,要不流程复杂、要不成本、门槛较高,这些产品都没有照顾到小商家身上,小商家依然使用低效的推广方法。
Jeffery
2019/07/30
1.5K0
我的精益画布
画布就是一切(一)— 画布编程的基本模式
我开发过基于QT的客户端程序、基于C# WinForm客户端,开发过Java后端服务,此外,前端VUE和React我也开发过不少。对应我所开发过的东西,比起一行一行冰冷的代码,我更加迷恋哪些能够直观的,可视化的东西。还记得以前在开发C#的时候,接触过一个的C# WinForm库NetronGraphLib,这个库能够让我们轻松的构建属于自己的流程图绘制软件,让我们能够以拖拉拽的方式来构建图(下图就是NetronGraphLib库的官方示例应用Cobalt):
w4ngzhen
2023/10/16
2740
画布就是一切(一)— 画布编程的基本模式
画布就是一切(一)— 画布编程的基本模式
我开发过基于QT的客户端程序、基于C# WinForm客户端,开发过Java后端服务,此外,前端VUE和React我也开发过不少。对应我所开发过的东西,比起一行一行冰冷的代码,我更加迷恋哪些能够直观的,可视化的东西。还记得以前在开发C#的时候,接触过一个的C# WinForm库NetronGraphLib,这个库能够让我们轻松的构建属于自己的流程图绘制软件,让我们能够以拖拉拽的方式来构建图(下图就是NetronGraphLib库的官方示例应用Cobalt):
w4ngzhen
2023/10/16
2660
画布就是一切(一)— 画布编程的基本模式
画布就是一切(一)— 画布编程的基本模式
我开发过基于QT的客户端程序、基于C# WinForm客户端,开发过Java后端服务,此外,前端VUE和React我也开发过不少。对应我所开发过的东西,比起一行一行冰冷的代码,我更加迷恋哪些能够直观的,可视化的东西。还记得以前在开发C#的时候,接触过一个的C# WinForm库NetronGraphLib,这个库能够让我们轻松的构建属于自己的流程图绘制软件,让我们能够以拖拉拽的方式来构建图(下图就是NetronGraphLib库的官方示例应用Cobalt):
w4ngzhen
2023/10/16
2170
画布就是一切(一)— 画布编程的基本模式
JavaScript 编程精解 中文第三版 十七、在画布上绘图
浏览器为我们提供了多种绘图方式。最简单的方式是用样式来规定普通 DOM 对象的位置和颜色。就像在上一章中那个游戏展示的,我们可以使用这种方式实现很多功能。我们可以为节点添加半透明的背景图片,来获得我们希望的节点外观。我们也可以使用transform样式来旋转或倾斜节点。
ApacheCN_飞龙
2022/12/01
3.8K0
JavaScript 编程精解 中文第三版 十七、在画布上绘图
Fabric.js 缩放画布 🍬
getZoom 可以获取画布当前缩放级别,用 setZoom 设置一个新的缩放级别。
德育处主任
2022/06/10
5.8K0
Fabric.js 缩放画布 🍬
【Android】设置透明、半透明等效果
View v = findViewById(R.id.content);//找到你要设透明背景的layout 的id
易寒
2021/12/22
3.6K0
html5 canvas画布
<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title></title> </head> <body>     <canvas id="myCanvas" width="80px" height="80px" style="border: 1px solid #000000"></canvas>     <canvas id="myCanvas2"></canvas>     <canvas id="myCanvas3"></c
用户7718188
2021/11/01
9040
组件注册与画布渲染
假如我们将可视化搭建整体定义为 <Designer>,那么 API 可能是这样的:
黄子毅
2023/02/14
1.3K0
组件注册与画布渲染
透明盒子
在这里插入图片描述 <!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .box{ position: relative; width:500px; } .images-box{ background: #9cf3c3; width:100%;height:300px; } .sign{
达达前端
2019/07/03
4.4K0
Shader-透明效果-透明度测试
在代码中添加Cull Off关闭渲染图元的剔除功能,这时所有的物体都是正反面双向渲染,得到效果如下
祝你万事顺利
2019/05/28
1.5K0
Shader-透明效果-透明度混合
透明度混合相较于透明度测试更加复杂一些,透明度混合可以得到真正的半透明效果,使用当前片元和透明度作为混合因子,与已经存储在颜色缓冲区的颜色值进行混合,得到新的颜色。透明度混合需要关闭深度写入,这使得我们需要关注物体的渲染顺序。 我们使用Unity的混合指令Blend,想实现半透明的效果就要把当前自身的颜色和已经存在的颜色缓冲中的颜色进行混合,混合时使用的函数就是该指令决定的。
祝你万事顺利
2019/05/28
2.2K0
Fabric.js 清空画布,甚至连画布元素也给你干掉😏
上面的代码可以把清空画布,但如果没有了解过 canvas ,或者不熟悉的工友,看到上面的代码可能会有点懵。
德育处主任
2022/09/23
4.5K0
Fabric.js 清空画布,甚至连画布元素也给你干掉😏

相似问题

JavaScript画布透明框背后的模糊

10

Android画布透明透明

30

透明SWT画布

51

画布彩色透明

12

在画布上画不透明(点在行) javascript

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文