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 相关文章推荐
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
Oct 31 Javascript
Sublime Text 3常用插件及安装方法
Dec 16 Javascript
jQuery实现定位滚动条位置
Aug 05 Javascript
基于jQuery实现的查看全文功能【实用】
Dec 11 Javascript
详解vue项目首页加载速度优化
Oct 18 Javascript
vue.js在标签属性中插入变量参数的方法
Mar 06 Javascript
小程序实现发表评论功能
Jul 06 Javascript
jQuery中$原理实例分析
Aug 13 jQuery
JavaScript中Dom操作实例详解
Jul 08 Javascript
基于vue+element实现全局loading过程详解
Jul 10 Javascript
es5 类与es6中class的区别小结
Nov 09 Javascript
详解JavaScript的计时器和按钮效果设置
Feb 18 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
学习使用curl采集curl使用方法
2012/01/11 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
微信支付开发订单查询实例
2016/07/12 PHP
推荐20家国外的脚本下载网站
2011/04/28 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
python刷投票的脚本实现代码
2014/11/08 Python
用Python读取几十万行文本数据
2018/12/24 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
Python猜数字算法题详解
2020/03/01 Python
python生成大写32位uuid代码
2020/03/03 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
const和static readonly区别
2013/05/20 面试题
办公室文书岗位职责
2013/12/16 职场文书
社区庆中秋节活动方案
2014/02/07 职场文书
安全标准化实施方案
2014/02/20 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
python析构函数用法及注意事项
2021/06/22 Python