JS实现canvas简单小画板功能


Posted in Javascript onJune 23, 2020

本文实例为大家分享了JS实现canvas简单小画板的具体代码,供大家参考,具体内容如下

JS实现canvas简单小画板功能

Html部分:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <link rel="stylesheet" href="./index.css" rel="external nofollow" >
  <title>Document</title>
</head>
<body>
  <div class="container">
    <canvas id="cavs" width="700" height="330"></canvas>
    <ul>
      <li> <input type="color" id="color"> </li>
      <li> <input type="button" id="cleanBoard" value="清屏"></li>
      <li> <input type="button" id="eraser" value="橡皮"></li>
      <li> <input type="button" id="rescind" value=撤销></li>
      <li> <input type="button" id="save" value=保存></li>
      <li><input type="range" id="lineRuler" min="1" max="20"> </li>
    </ul>
  </div>
  <script src="./index.js"></script>
</body>
</html>

CSS部分:

*{
  margin: 0;
  padding: 0;
  list-style: none;
}
.container{
  margin: 30px;
}
#cavs{
  border: 1px solid red;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.6);
  border-radius: 10px;
}
.container ul{
  margin-top: 20px;
  width: 700px;
  text-align: center;
}
.container ul li{
  display: inline-block;
  margin-left: 35px;
}
.container ul li input{
  padding: 6px 15px;
  border-radius: 10px;
  border: none;
  outline: none;
  cursor: pointer;
  transition: box-shadow 0.3s cubic-bezier(0.6, -0.28, 0.735, 0.045);
}
.container ul li input:hover{
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.6);
}

JS部分:

var drawingBoard = {
  cavs: document.getElementById('cavs'),
  ctx: document.getElementById('cavs').getContext('2d'),
  ul_node: document.getElementsByTagName('ul')[0],
  colorBoard: document.getElementById('color'),
  lineRuler: document.getElementById('lineRuler'),
  imgArr: [],//存放图片
  init: function () {
    this.ctx.lineCap = 'round';
    this.ctx.lineJoin = 'round';
    this.drawing();//开始画画
    this.btnsFnAll();
  },
  drawing: function () {
    var self = this;
    var left = this.cavs.offsetLeft;
    this.cavs.onmousedown = function (e) {
      var e_x = e.pageX;//鼠标在画布上的x点
      var e_y = e.pageY;
      self.ctx.beginPath();//开始绘制
      self.ctx.moveTo(e_x - left, e_y - left);//落笔点,开始点
      var imgData = self.ctx.getImageData(0, 0, self.cavs.offsetWidth, self.cavs.offsetHeight);
      self.imgArr.push(imgData)
      document.onmousemove = function (e) {
        self.ctx.lineTo(e.pageX - left, e.pageY - left);//落笔点,开始点
        self.ctx.stroke();
      }
      document.onmouseup = function () {
        document.onmousemove = null;
        self.ctx.closePath();//闭合当前的路径 结束绘制
      }
      this.onpointerleave = function () {
        document.onmousemove = null;
      }
    }
  },
  btnsFnAll: function () {
    var self = this;
    this.ul_node.addEventListener('click', function (e) {
      console.log(e.target.id);
      switch (e.target.id) {
        case 'cleanBoard'://清屏
          self.ctx.clearRect(0, 0, self.cavs.offsetWidth, self.cavs.offsetHeight)
          break;
        case 'eraser'://橡皮
          self.ctx.strokeStyle = "#ffffff";
          break;
        case 'save'://保存
          let url = self.cavs.toDataURL('image/jpg');
          let a = document.createElement('a');
          document.body.appendChild(a);
          a.href = url;
          a.download = '草稿纸';
          a.target = '_blank';
          a.click()
          break;
        case 'rescind'://撤销
          console.log(self.imgArr)
          if (self.imgArr.length > 0) {
            self.ctx.putImageData(self.imgArr.pop(), 0, 0)
          }
          break;
      }
    });
    this.colorBoard.onchange = function () {
      self.ctx.strokeStyle = this.value;
    };
    this.lineRuler.onchange = function () {
      self.ctx.lineWidth = this.value
    }
  }
}
drawingBoard.init();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
跟着JQuery API学Jquery 之三 筛选
Apr 09 Javascript
探讨js中的双感叹号判断
Nov 11 Javascript
jQuery插件boxScroll实现图片轮播特效
Jul 14 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
freemarker判断对象是否为空的方法
Aug 13 Javascript
基于jQuery插件实现点击小图显示大图效果
May 11 Javascript
使用plupload自定义参数实现多文件上传
Jul 19 Javascript
bootstrap警告框使用方法解析
Jan 13 Javascript
vue学习教程之带你一步步详细解析vue-cli
Dec 26 Javascript
vue 左滑删除功能的示例代码
Jan 28 Javascript
Vue快速实现通用表单验证功能
Dec 05 Javascript
vue npm install 安装某个指定的版本操作
Aug 11 Javascript
javascript+Canvas实现画板功能
Jun 23 #Javascript
vue.js实现照片放大功能
Jun 23 #Javascript
vue实现点击按钮切换背景颜色的示例代码
Jun 23 #Javascript
vue.js实现双击放大预览功能
Jun 23 #Javascript
vue实现分页的三种效果
Jun 23 #Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
Jun 23 #Javascript
weui上传多图片,压缩,base64编码的示例代码
Jun 22 #Javascript
You might like
php中explode与split的区别介绍
2012/10/03 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
js option删除代码集合
2008/11/12 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
Require.js的基本用法详解
2017/07/03 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
简单介绍Python中的RSS处理
2015/04/13 Python
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
python实现爬虫下载美女图片
2015/07/14 Python
python3爬虫之设计签名小程序
2018/06/19 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
工业自动化毕业生自荐信范文
2014/01/04 职场文书
学术会议邀请函范文
2014/01/22 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL