首页 > 其他分享 >js实现电子白板

js实现电子白板

时间:2023-10-09 14:44:34浏览次数:35  
标签:canvas false 实现 电子白板 ctx xiangpicha js bi state

功能:使用画笔绘制笔迹(线条)、橡皮檫

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js实现电子白板</title>
</head>
<body>
    <canvas id="canvas" width="500px" height="500px" style="border: 3px solid black;"></canvas>
    <br>
    <button onclick="show()">显示</button>
    <button onclick="hide()">隐藏</button>
    <button onclick="clearAnnote()">清空</button>
    <button id="xiangpicha" onclick="xiangpicha()">橡皮檫</button>
    <script>
        var canvas = document.getElementById("canvas");
        var ctx = canvas.getContext("2d");
        var state_bi = true;
        var state_press = false;
        var lastX, lastY;
        var state_xiangpicha = false;

        function show(){
            canvas.style.display = "block";
            state_bi = true;
        }
        function hide(){
            canvas.style.display = "none";
            state_bi = false;
        }

        function clearAnnote(){
            ctx.clearRect(0,0,canvas.width, canvas.height);
        }

        function xiangpicha(){
            state_xiangpicha = state_xiangpicha == true ? false : true;
            if(state_xiangpicha){
                document.getElementById("xiangpicha").innerText = "关闭橡皮檫";
                state_bi = false;
            }else{
                document.getElementById("xiangpicha").innerText = "橡皮檫";
                state_bi = true;
            }
        }

        canvas.addEventListener("mousedown", (e)=>{
            state_press = true;

            if(state_bi){
                [lastX, lastY] = [e.offsetX, e.offsetY];
            }

            if(state_xiangpicha){
                ctx.clearRect(e.offsetX - 3, e.offsetY - 3, 6, 6);
            }
        })

        canvas.addEventListener("mousemove", (e)=>{
            if(state_bi && state_press){
                drawLine(lastX, lastY, e.offsetX, e.offsetY);
                [lastX, lastY] = [e.offsetX, e.offsetY];
            }

            if(state_xiangpicha && state_press){
                ctx.clearRect(e.offsetX - 3, e.offsetY - 3, 6, 6);
            }
        })

        canvas.addEventListener("mouseup", (e)=>{
            state_press = false;
        })

        function drawLine(x1, y1, x2, y2){
            ctx.beginPath();
            ctx.moveTo(x1, y1);
            ctx.lineTo(x2, y2);
            ctx.lineWidth = 3;
            ctx.strokeStyle = "#FF0000";
            ctx.stroke();
        }
    </script>
</body>
</html>

 

标签:canvas,false,实现,电子白板,ctx,xiangpicha,js,bi,state
From: https://www.cnblogs.com/shiyixirui/p/17751706.html

相关文章

  • 原生js面试题
    一、深拷贝和浅拷贝-1js的数据类型基本类型和复杂类型-2堆和栈基本类型的值和复杂类型的地址存在栈中,复杂类型的地址指向堆中的内存-3深拷贝和浅拷贝的概念深拷贝的前提是复杂类型的复制-4举例说明 如果有个变量a和一个变量b如果a是一个对象......
  • SpringBoot之使用Redis和注解实现接口幂等性
    目录1接口幂等性1.1概念1.2实现思路1.3代码实现1.3.1pom1.3.2JedisUtil1.3.3自定义注解@ApiIdempotent1.3.4ApiIdempotentInterceptor拦截器1.3.5TokenServiceImpl1.3.6TestApplication1.4测试验证1.4.1获取token的控制器TokenController1.4.2TestController1.5注意......
  • js实现文件分片上传
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>文件分片上传</title></head&......
  • js函数,js对象
    1定义一个函数21.functionfuctionName(参数1,参数2){3//要执行的代码4return要返回的结果5}6782.varfunctionName=function(a,b)91011ES6箭头函数:(...)=>{...}12arr.forEach((e)=>{13console.log(e);14})基础对象模......
  • WebForm后端调用前端JS
    /*注意:定义的js方法一定要放在head里面,不能放下面,否则不生效*/<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="WebForm1.aspx.cs"Inherits="WebFormBackEndCallFrontJsDemo.WebForm1"%><!DOCTYPEhtml><htmlxmlns=&qu......
  • CSS~等待效果实现
    <style>.first-loading-wrp{display:flex;justify-content:center;align-items:center;flex-direction:column;min-height:420px;height:100%;margin-top:150px;}.first-loading-wrp.loadin......
  • js实现分片上传文件
    <template><div><inputtype="file"@change="fileEvent"/></div></template><script>importaxiosfrom"axios";exportdefault{data(){return{size:1*......
  • 【webapp】jsp EL 的基本语法和用法
    EL(表达式语言)是用于在JSP页面中访问和操作数据的简洁表达式语言。EL提供了一种简化和统一的方式来访问变量、属性、集合和其他对象。以下是EL的基本语法和用法:基本语法:${expression}:用于在JSP页面中嵌入EL表达式。${object.property}:访问对象的属性。${map.key}:访......
  • 【webapp】jsp 操作数据库
    在JSP中连接和操作数据库需要使用Java的JDBC(JavaDatabaseConnectivity)API。下面是学习在JSP中使用JDBC连接和操作数据库的基本步骤:导入JDBC驱动程序:下载并导入适合您所使用的数据库的JDBC驱动程序JAR文件。不同的数据库有不同的驱动程序。将JDBC驱动程......
  • 实现starter组件自动装配以及可配置
    实现starter组件自动装配以及可配置自动装配的包,导入就可以进行自动装配了<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>2.1.4.RELEASE</version></dependency>......