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.AutoComplete.js中文修正版(支持firefox)
Apr 09 Javascript
基于jQuery实现图片的前进与后退功能
Apr 24 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
Nov 07 Javascript
JS Loading功能的简单实现
Nov 29 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
jQuery scroll事件实现监控滚动条分页示例
Apr 04 Javascript
jquery插件jSignature实现手动签名
May 04 Javascript
js实现5秒倒计时重新发送短信功能
Feb 05 Javascript
实例学习JavaScript读取和写入cookie
Jan 29 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
Aug 08 Javascript
vue element动态渲染、移除表单并添加验证的实现
Jan 16 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
Oct 24 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官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
php实现异步数据调用的方法
2015/12/24 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python删除过期文件的方法
2015/05/29 Python
python获取目录下所有文件的方法
2015/06/01 Python
Python文件操作基本流程代码实例
2017/12/11 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
基于python实现简单日历
2018/07/28 Python
Python对列表的操作知识点详解
2019/08/20 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
python爬虫要用到的库总结
2020/07/28 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
Windows和Linux动态库应用异同
2016/04/17 面试题
求职推荐信范文
2013/12/01 职场文书
给国外客户的邀请函
2014/01/30 职场文书
文明城市标语
2014/06/16 职场文书