首页 > 其他分享 >HTML画布canvas绘制图形,解决拖影问题

HTML画布canvas绘制图形,解决拖影问题

时间:2024-12-26 15:09:44浏览次数:2  
标签:canvas ctx 画布 拖影 HTML var rect lasting

 

在使用HTMl画面 canvas 绘制矩形,圆等图形时,总是出现拖影。

解决这个问题有很多中方法:

方法一:鼠标移动过程中中不画上去,在释放鼠标的时候绘制上去,这样就看不到拖影,但是看不到绘制过程

方法二:在鼠标移动的时候,清除上一次绘制的矩形,然后在画,这样就没有拖影了,但是计算起来麻烦,要多几行代码

方法三:结合方法一和方法二,做两层画布,重叠显示,上层作为临时画布,下层持久显示,上层在鼠标移动过程中,清空整个画布,不用计算上一次的矩形位置

 

示例代码(方法三)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 批注画布 -->
    <canvas id="canvas" style="background-color: transparent;border: 1px solid red;position: absolute;top: 100px;left: 100px; z-index: 100;" width="800px" height="600px"></canvas>
    <canvas id="canvas_lasting" style="background-color: transparent;border: 1px solid red;position: absolute;top: 100px;left: 100px;" width="800px" height="600px"></canvas>
    <script>
        var canvas = document.getElementById("canvas");                     // 批注画布-临时
        var ctx = canvas.getContext("2d");

        var canvas_lasting = document.getElementById("canvas_lasting");     // 批注画布
        var ctx_lasting = canvas_lasting.getContext("2d");

        var state = {"press": false}
        var rect = {"x":0, "y":0, "w":0, "h":0}

        canvas.addEventListener("mousedown", (e)=>{
            state.press = true;
            rect = {"x": e.offsetX, "y": e.offsetY, "w": 0, "h": 0}
        })

        canvas.addEventListener("mousemove", (e)=>{
            if(state.press){
                rect.w = e.offsetX - rect.x;
                rect.h= e.offsetY - rect.y;
                
                ctx.clearRect(0, 0, canvas.width, canvas.height)
                ctx.beginPath();
                ctx.rect(rect.x, rect.y, rect.w, rect.h);
                ctx.stroke();
            }
        })

        canvas.addEventListener("mouseup", (e)=>{
            state.press = false;

            ctx_lasting.beginPath();
            ctx_lasting.rect(rect.x, rect.y, rect.w, rect.h);
            ctx_lasting.stroke();
        })
    </script>
</body>
</html>

 

 

 

标签:canvas,ctx,画布,拖影,HTML,var,rect,lasting
From: https://www.cnblogs.com/shiyixirui/p/18632877

相关文章

  • HTML实现一个脱离video标签可拖拽的进度控制条
    HTML实现一个脱离video标签可拖拽的进度控制条主要用到html5的inputrange标签。 <!DOCTYPEhtml><html><body><videoid="myVideo"width="320"height="240"><sourcesrc="http://***.com/record/st-ec-app/1804405750......
  • 学习前端时做的一个博客的模板psd2html代码
    链接:https://files.cnblogs.com/files/blogs/779648/%E5%8D%9A%E5%AE%A2.zip?t=1735182491&download=true总结:1、制作过程中会使用ps切片切出有些需要的图或者图标。2、需要纯手写css,html代码,某些css代码可以参考ps图层的css复制。3、可先按页面布局写好网页中容器【div,cs......
  • 使用html5写一个刮刮乐奖券的布局
    当然,以下是一个简单的刮刮乐奖券的前端HTML5和CSS布局示例:HTML:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">......
  • html中video标签的poster属性如何铺满video标签?
    在HTML中,<video>标签的poster属性用于指定视频加载时显示的封面图像。要使poster图像铺满整个<video>标签,你可以使用CSS样式来设置。下面是一个示例,展示如何使poster图像铺满<video>标签:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><......
  • 如何使用HTML5生成一张缩略图?
    在HTML5中,直接生成缩略图的功能并不内置。然而,你可以使用HTML5的<canvas>元素与JavaScript来创建一个缩略图。以下是一个简单的步骤说明:获取原始图像:首先,你需要一个原始图像。这可以通过HTML的<img>标签获取,或者通过JavaScript的Image对象动态加载。创建Canvas元素:然后,创建一个......
  • html,css实现图片轮播
    html:Title<!--末尾补一个首尾数据--><li><imgsrc="4cdca0ed47bdc97f0638dc1366d5652.jpg"></li></ul>css:*{padding:0;margin:0;}li{list-style:none;}body,html{width:......
  • Canvas实现渐变圆环并下载为图片
    因为地图上要展示一个渐变圆圆环的图标,找了很久没有找到现成满意的,于是就干脆自己使用Canvas画一个,颜色透明度什么的都额可以自己调整,Nice。其实模糊的圆环原理也很简单,就是绘制多个圆形,透明度设置不同就行了。然后页面上添加一个按钮,并通过点击该按钮将Canvas上的图形......
  • HTML页面的哈希(hash)路由原理+原生js案例
    HTML页面的哈希(hash)路由原理+原生js案例|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-......
  • 使用html5写一个背景粒子特效
    创建一个背景粒子特效需要综合运用HTML5、CSS3和JavaScript。以下是一个简单的示例,演示如何使用HTML5的<canvas>元素和JavaScript来创建一个粒子动画背景。HTML<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"......
  • html5中的meta标签keywords有什么作用?
    在HTML5中,<meta>标签的keywords属性曾经被用来为网页提供关键词,以便搜索引擎能够更好地理解和索引网页内容。然而,这个属性的实际作用在近年来已经大大减弱。过去,搜索引擎会依赖keywords属性来了解网页的主题和内容。网站开发者会在keywords属性中填入一系列与网页内容相关的关键......