• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > JS canvas实现画板和签字板功能

JS canvas实现画板和签字板功能

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了canvas画板,canvas签字板等相关知识,希望对您有所帮助

这篇文章主要为大家详细介绍了JS canvas实现画板和签字板功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了JS canvas实现画板/签字板功能的具体代码,供大家参考,具体内容如下

前言

常见的电子教室里的电子黑板。

本文特点:

原生JS
封装好的模块

最简代码样例

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title></head><body><canvas id="canvas"></canvas><script>    let c = document.getElementById('canvas');    c.width = window.innerWidth;    c.height = window.innerHeight;    let ctx = c.getContext('2d');    // draw one black board    ctx.fillStyle = "black";    ctx.fillRect(0,0,600,300);    // 按下标记    let onoff = false,        oldx = -10,        oldy = -10;    // 设置颜色    let linecolor = "white";    // 设置线宽    let linw = 4;    // 添加鼠标事件    // 按下    c.addEventListener('mousedown', event => {        onoff = true;        // 位置 - 10是为了矫正位置,把绘图放在鼠标指针的顶端        oldx = event.pageX - 10;        oldy = event.pageY - 10;    },false);    // 移动    c.addEventListener('mousemove', event => {        if(onoff == true){        let newx = event.pageX - 10,            newy = event.pageY - 10;        // 绘图        ctx.beginPath();        ctx.moveTo(oldx,oldy);        ctx.lineTo(newx,newy);        ctx.strokeStyle = linecolor;        ctx.lineWidth = linw;        ctx.lineCap = "round";        ctx.stroke();        // 每次移动都要更新坐标位置        oldx = newx,        oldy = newy;        }    }, true);    // 弹起    c.addEventListener('mouseup', ()=> {        onoff = false;    },false);</script></body></html>

结果展示


6035df413c697.png


代码讲解

思路

1、鼠标按下,开始描画。鼠标按下事件。

2、鼠标弹起,结束描画。鼠标弹起事件。

3、鼠标按下移动,路径画线。鼠标移动事件。

代码讲解

整体思路:按下鼠标,触发移动的开关,移动后开始记录线条(用移动后的坐标-移动前的坐标,然后绘线),每次移动都会更新旧坐标。松开鼠标后,释放移动开关。

1、只有在鼠标按下,才会触发移动绘图的效果,所以需要增加一个状态判断。

2、因为鼠标指针和实际位置有一个偏移量,所以在坐标定位的时候,需要增加pagex-10从而使坐标位于指针的尖端处。

3、每次移动都要更新坐标位置,用小段的线段来模拟不规则的线。

封装模块

<canvas id="canvas"></canvas><script>class Board{    constructor(canvasName = 'canvas', data = new Map([        ["onoff", false],        ["oldx", -10],        ["oldy", -10],        ["fillStyle", "black"],        ["lineColor", "white"],        ["lineWidth", 4],        ["lineCap", "round"],        ["canvasWidth", window.innerWidth],        ["canvasHeight", window.innerHeight]    ])){        // this.data = data;        this.c = document.getElementById(canvasName);        this.ctx = this.c.getContext('2d');        this.onoff = data.get("onoff");        this.oldx = data.get("oldx");        this.oldy = data.get("oldy");        this.lineColor = data.get("lineColor");        this.lineWidth = data.get("lineWidth");        this.lineCap = data.get("lineCap");        this.c.width = data.get("canvasWidth");        this.c.height = data.get("canvasHeight");        this.ctx.fillStyle = data.get("fillStyle");        this.ctx.fillRect(0,0,600,300);    }    eventOperation(){        // 添加鼠标事件        // 按下        this.c.addEventListener('mousedown', event => {            this.onoff = true;            // 位置 - 10是为了矫正位置,把绘图放在鼠标指针的顶端            this.oldx = event.pageX - 10;            this.oldy = event.pageY - 10;        },false);        // 移动        this.c.addEventListener('mousemove', event => {            if(this.onoff == true){                let newx = event.pageX - 10,                newy = event.pageY - 10;                // 绘图                this.ctx.beginPath();                this.ctx.moveTo(this.oldx,this.oldy);                this.ctx.lineTo(newx,newy);                this.ctx.strokeStyle = this.lineColor;                this.ctx.lineWidth = this.lineWidth;                this.ctx.lineCap = this.lineCap;                           this.ctx.stroke();                // 每次移动都要更新坐标位置                this.oldx = newx,                this.oldy = newy;            }        }, true);        // 弹起        this.c.addEventListener('mouseup', ()=> {            this.onoff = false;        },false);    }}let board = new Board();board.eventOperation();</script>


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JS canvas实现画板和签字板功能

相关文章

  • 2022-04-29PhotoShop简单制作面条艺术字体效果设计教程
  • 2022-04-29详解MySQL 联合查询 (IN和EXISTS区别)
  • 2022-04-29关键词组合的SEO优化策略
  • 2022-04-29WordPress引入Dplayer并使用简码
  • 2022-04-29织梦Dedecms系统实现按“字母检索”搜索功能
  • 2022-04-29宝塔面板搭建WordPress站点主题404页面不生效
  • 2022-04-29帝国CMS7.5使用TAGSID实现伪静态调用方法
  • 2022-04-29Thinkphp5整合phpsocketio过程亲自踩的坑!
  • 2022-04-29基于thinkphp6.x的API接口开发简单小实例
  • 2022-04-29PHP如何只抓取网页头

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 重新对百度支付进行编写封装(百度智能小程序支付)
    • 如何去除PS渐变时存在色阶问题
    • 详解Thinkphp5整合grid++报表
    • 搜索引擎营销中作弊的方式—链接作弊
    • PHP工厂方法模式的好处是什么
    • IIS7.5开启GZIP压缩
    • 手把手教你CSS如何实现毛玻璃效果
    • 深入浅析Bootstrap中的自动定位浮标
    • 什么是依赖注入?在Angular中怎么实现?
    • uniapp怎么实现小程序页面的自由拖拽功能

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有