• 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实现画板和签字板功能

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了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是为了矫正位置,把绘图放在鼠标指针的顶端     
  


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

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

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

相关文章

  • 关键词meta标签Keywords优化详解
  • 介绍thinkphp5框架中的hook机制
  • ThinkPHP6.0 重写URL去掉Index.php的解决方法
  • 浅谈小程序跨页面之间通信的几种方式
  • 列举论坛最常见的SEO优化问题及解答
  • PHP开发api接口验证实例
  • AI和PS快速制作漂亮复古海报
  • PHP怎么只保留汉字
  • 解决LNMP环境无法彻底删除原网站目录文件夹的方法
  • DedeCMS输入Tags标签全角逗号自动变半角的方法

文章分类

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

最近更新的内容

    • 如何解决Nginx部署thinkphp时报错500问题
    • html5以及jQuery实现本地图片上传前的预览代码实例讲解
    • Photoshop制作立体效果的金色艺术字
    • Photoshop打造超酷的火焰图形
    • 为什么Javascript小数相减会出现一长串的小数位数?
    • Photoshop快速制作创意的木块字
    • PS鼠绘清纯可爱的古装卡通小女孩
    • 带你实现女朋友欲罢不能的网易云音乐宇宙尘埃特效
    • 谈谈CSS实现水平垂直居中布局的方法
    • Discuz!您当前的访问请求当中含有非法字符,已经被系统拒绝解决办法

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

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