前言:

  canvas可以单独算为前端的一大知识模块, 今天就研究一下.

  先做下前文铺垫:

    ①创建canvas

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"></canvas>

    ②获取canvas

    var cavs = document.getElementById("cavs");           //获取canvas
var ctx = cavs.getContext("2d"); //可以理解为生成一个2d画笔
ctx.moveTo(100, 100); //落笔点
ctx.lineTo(200, 200); //结束点

    ③常用样式

         ctx.strokeStyle = "#f00"                 //线条的颜色2
ctx.lineWidth = 10; //线条粗细

    ④绘制线条

      ctx.stroke();            //绘制线条

    ⑤填充图案

     ctx.fillStyle = "yellow";            //填充颜色
     ctx.fill(); //进行填充

    ⑥开始结束

         ctx.beginPath();    //开始
ctx.closePath(); //结束

    ⑦其他

         var img = ctx.getImageData(x, y, width, height);     //截取canvas中图案
ctx.putImageData(img, width, height) //将img放到canvas中
ctx.clearRect(x,y,canvas.width,canvas.height) //清除画布

正文:

  说再多也没用, 最终还是进行实战, 终于进入正文了;

  HTML部分

<div class="wrapper">
<canvas id="cavs" width="1000" height="500"></canvas>
<ul class="btn-list">
<li><input type="color" id="colorBoard"></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="range" id="lineRuler" value="线条" min="1" max="30"></li>
</ul>
</div>

  css部分

*{
padding:;
margin:;
}
.wrapper{
margin: 15px;
}
.wrapper canvas{
border:1px solid #000;
border-radius: 25px;
box-shadow:10px 10px 5px #999;
margin-bottom: 20px;
}
.wrapper ul{
width: 1000px;
text-align: center;
}
.wrapper ul li{
display: inline-block;
margin-left: 40px;
}
.wrapper ul li input{
display: block;
background: #ddd;
color: #000;
border-radius: 25px;
border:none;
padding: 10px 20px;
font-size: 15px;
transition-duration: 0.2s;
}
.wrapper ul li input:hover{
background: #999;
border: 1px solid #f00;
box-shadow: 0 12px 16px 0 rgba(0,0,0,0.3);
}

  js部分

function ID(str) {
return document.getElementById(str);
} var darwingLineObj = {
cavs:this.ID("canvas"),
color:this.ID("color"),
clear:this.ID("clear"),
eraser:this.ID("eraser"),
rescind:this.ID("rescind"),
weight:this.ID("weight"),
bool:false,
arrImg:[],
//初始化
init:function(){
this.draw();
},
draw:function(){
var cavs = this.cavs,
self = this,
ctx = cavs.getContext("2d");
ctx.lineWidth = 15;
ctx.lineCap = "round"; //线条始终的样式
ctx.lineJoin = "round"; //转弯的圆角 var c_x = cavs.offsetLeft, //元素距离左侧的位置
c_y = cavs.offsetTop; //canvas距离顶部 cavs.onmousedown = function(e){
e = e || window.event;
self.bool = true;
var m_x = e.pageX - c_x;
var m_y = e.pageY - c_y;
ctx.beginPath();
ctx.moveTo(m_x,m_y); //鼠标在画布上的触点 var imgData = ctx.getImageData(0, 0, cavs.width, cavs.height); //将每次画完拷贝到数组中
self.arrImg.push(imgData);
} cavs.onmousemove = function(e){
if(self.bool){
ctx.lineTo(e.pageX-c_x, e.pageY-c_y);
ctx.stroke();
}
} cavs.onmouseup = function(e){
self.bool = false;
ctx.closePath();
} self.color.onchange = function(e){ //设置颜色
e = e || window.event;
//console.log(e.target.value)
ctx.strokeStyle = e.target.value;
} self.clear.onclick = function(){
ctx.clearRect(0,0,cavs.width,cavs.height)
} self.eraser.onclick = function(){
ctx.strokeStyle = "#fff";
} self.rescind.onclick = function(){ //撤销的重点难点
if (self.arrImg.length>0) {
ctx.putImageData(self.arrImg.pop(),0,0)
}
} self.weight.onchange = function(e){ //设置线条粗细
//console.log(e.target.value)
ctx.lineWidth = e.target.value;
} }//draw end } darwingLineObj.init();

结语:

  本文还有不足之处, 欢迎大家指正.

声明:

  参考: 渡一教育

    

canvas的常用功能(电脑版)的更多相关文章

  1. Nginx实战部署常用功能演示(超详细版),绝对给力~~~

    前言 上次分享了一些开发过程中常用的功能,但如果到真实环境中,其实还需要一些额外的配置,比如说跨域.缓存.配置SSL证书.高可用等,老规矩,还是挑几个平时比较常用的进行演示分享.上篇详见Nginx超详 ...

  2. 【朝花夕拾】Android自定义View篇之(二)Canvas常用功能

    前言 转在请申明,转自[https://www.cnblogs.com/andy-songwei/p/10960012.html],谢谢! 上一篇讲View的绘制流程中讲到过,最后一步是draw流程, ...

  3. PSPP:顶替SPSS常用功能的优秀软件, Linux 下的经济学用软件

    几个替代SPSS的软体Salstat http://salstat.sourceforge.net/PSPP http://www.gnu.org/software/pspp/pspp.htmlR h ...

  4. 微信网页版APP - 网页微信客户端电脑版体验

    微信网页版很早就出来了,解决了很多人上班不能玩手机的问题.微信电脑版-网页微信客户端,直接安装在桌面的微信网页版,免去了开浏览器的麻烦.双击就启动了,和其他的应用程序一样:运行过程中可以隐藏在桌面右下 ...

  5. 微信电脑版-微信for windows客户端发布

    12月份微信Windows版客户端1.0 Alpha推出,昨天微信for windows 1.0客户端(测试版)发布更新,超过三亿人使用的聊天应用,现在登录Windows桌面.你可以在Windows上 ...

  6. 微信电脑版真的要来了 微信Windows版客户端1.0 Alpha推出

    微信电脑版的搜索量一直很大,但只有网页版,之前也写了微信网页版APP - 网页微信客户端电脑版体验,在键盘上打字的感觉就是快.现在微信Windows版客户端1.0 Alpha推出了,来一睹芳容吧(20 ...

  7. 微信电脑版微信1.1 for Windows更新 可@人/转发撤回消息/可播小视频

    微信电脑版微信1.1 for Windows发布更新了,版本号为1.1.0.18,群聊可@人/可转发撤回消息/可播小视频,功能越来越接近微信手机版了. 本次更新的一些新特点: 群聊中可以@人. 消息可 ...

  8. 微信电脑版也能用公众号自定义菜单 微信1.2 for Windows发布

    昨日,微信电脑版发布更新,版本为微信1.2 for Windows,最大的特色就是加入了保存聊天记录功能,可以使用公账号菜单,手机上收藏的表情也能在电脑版上发送,可以接收转账消息. 本次微信pc版更新 ...

  9. 微信电脑版(Mac和Windows)安装

    内容简介 1.微信Windows版 2.微信Mac版 3.总结优势 微信电脑版 众所周知,腾讯公司(马化腾先生执掌的巨头公司)开发的超成功App:微信.一经推出便引发业界轰动,使用人数更是直逼QQ. ...

随机推荐

  1. 【转载】每个 Android 开发者必须知道的消息机制问题总结

    Android的消息机制几乎是面试必问的话题,当然也并不是因为面试,而去学习,更重要的是它在Android的开发中是必不可少的,占着举足轻重的地位,所以弄懂它是很有必要的.下面就来说说最基本的东西. ...

  2. 工具类ToastUtil 避免在子线程中使用抛异常 "Can't create handler inside thread that has not called Looper.prepare()"

    package com.example.kbr.utils; import android.view.Gravity; import android.widget.Toast; import io.r ...

  3. Python使用DB-API操作MySQL数据库

    Python提供了一个标准数据库API,称为DB-API,用于处理基于SQL的数据库.与任何底层数据库的交互都可以使用DB-API,因为DB-API在代码与驱动程序之间提供了一个抽象层,可以根据需要替 ...

  4. jQuery Migrate 插件用法

    jQuery Migrate是应用迁移辅助插件,是用于高级版本兼容低级版本辅助插件.例如jQuery版本用的是1.x,计划升级到3.x,就可以在页面删除1.x版本,换成3.x版本,如果有脚本错误,就引 ...

  5. 简易用户管理系统-前端实现(表单&提交请求&button$基础)

    laravel框架编写简易用户管理系统,前端Layui框架. 1.动态生成列表项 实现效果 PHP后台传入用户对象($users). 前端页面接收数据传入table. 逻辑就是在生成表格时,遍历传来的 ...

  6. [Linux] 使用mount来挂载设备到目录

    一般情况下直接mount 设备路径 目录路径,就可以了.umount 设备名,就可以卸载这个设备了使用lsblk -f可以查看挂载的设备,以及这些设备的文件系统. root@tao-PC:/boot# ...

  7. Linux文件基本命令

    Linux文件基本命令学习 操作技巧: 输入文件/目录/命令的前几个字母之后,按下tab键,则自动补全 按上/下,回滚曾经用过的命令 不想执行命令使用:crtl + c 基础命令: ls(查看) 基础 ...

  8. 非ssl给163发邮件,报错,无解ing

    #给163发送邮件import smtplibfrom email.mime.text import MIMETextnam='15527721040@163.com'send='1552772104 ...

  9. Centos 7+KVM(Windows Server 2008 r2 )

    KVM虚拟机 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度 ...

  10. linux 下安装 python ngix 项目发布流程

    1.安装python #1.安装python3.7所需要的依赖包yum -y groupinstall "Development tools"yum -y install zlib ...