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 相关文章推荐
动态调用css文件——jquery的应用
Feb 20 Javascript
使用Firebug对js进行断点调试的图文方法
Apr 02 Javascript
div模拟选择框示例代码
Nov 03 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 Javascript
jQuery简单实现tab选项卡切换效果
Jun 20 Javascript
Angularjs 自定义服务的三种方式(推荐)
Aug 02 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
Jun 08 jQuery
JavaScript中关于class的调用方法
Nov 28 Javascript
微信小程序wx.previewImage预览图片实例详解
Dec 07 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
May 18 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
Jun 04 Javascript
JS制作简易计算器的实例代码
Jul 04 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
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
Python运算符重载用法实例分析
2015/06/01 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
keras得到每层的系数方式
2020/06/15 Python
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
cf收人广告词大全
2014/03/14 职场文书
学习交流会主持词
2014/04/01 职场文书
贺卡寄语大全
2014/04/11 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
新店开张宣传语
2015/07/13 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
Redis入门基础常用操作命令整理
2022/06/01 Redis
keepalived + nginx 实现高可用方案
2022/12/24 Servers