前言:

  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. 控件类——UIControl(其子类、属性)

    UIControl : 控制类->触摸一个视图 ,执行某个任务 点击某个视图,触发一个事件 UIControl:是一个可以带有触发事件的视图. 主要内容: 0.UIContorl ->的子 ...

  2. 安卓开发笔记(三十三):Android仿写微信发现

    首先我们来看看仿写之后的效果: 看到是这个界面我们首先应该思考这些按钮是怎么做出来的?有了一个整体的思路之后才知道该怎么办.最开始我想的就直接利用button控件上面直接加上png的图片就可以形成一个 ...

  3. Android 遍历手机应用,跳转应用市场详情页面

    首先遍历手机内应用,找到需要的应用包名: /** * 遍历手机内应用包名 * @param context */ public static void loadApps(Context context ...

  4. gradle使用基础

    说明 介绍gradle使用基础,gradle基础脚本结构和常规使用方法,以及一个简单的gradle示例.主要是为了简单的介绍gradle使用. gradle环境配置 gradle可以通过两种方式运行g ...

  5. PHP配置篇(一)--php开启redis扩展

    因为最近要用到Redis,下面记录下如何给PHP开启redis的扩展. 一.安装redis 1.安装redis:https://github.com/MSOpenTech/redis/releases ...

  6. BayaiM__经典SQL语句大全

    BayaiM__经典SQL语句大全 原创 作者:bayaim 时间:2016-06-16 09:22:24 32 0删除编辑 以下这篇文章,是一个垃圾,垃圾中的垃圾 ----------------- ...

  7. 在linux中怎么查看错误日志

    cat或者tail -f命令 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一/var/log/secure 与安全 ...

  8. python的http包

    http包简介 http包提供了 HTTP协议的一些功能,主要模块有: http.client   --- 底层的 HTTP 协议的一些功能,可以为 urllib.request 模块所用 http. ...

  9. angular的Hash 模式和 HTML 5 模式

    去除地址 # ,将{ provide: LocationStrategy, useClass: HashLocationStrategy }改为 { provide: LocationStrategy ...

  10. H5/纯JS实现:把网页中的文字复制到剪切板

    copy =() => { const dom = document.getElementById(`collect-text-${t.Id}`) const selection = windo ...