canvas的常用功能(电脑版)
前言:
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的常用功能(电脑版)的更多相关文章
- Nginx实战部署常用功能演示(超详细版),绝对给力~~~
前言 上次分享了一些开发过程中常用的功能,但如果到真实环境中,其实还需要一些额外的配置,比如说跨域.缓存.配置SSL证书.高可用等,老规矩,还是挑几个平时比较常用的进行演示分享.上篇详见Nginx超详 ...
- 【朝花夕拾】Android自定义View篇之(二)Canvas常用功能
前言 转在请申明,转自[https://www.cnblogs.com/andy-songwei/p/10960012.html],谢谢! 上一篇讲View的绘制流程中讲到过,最后一步是draw流程, ...
- PSPP:顶替SPSS常用功能的优秀软件, Linux 下的经济学用软件
几个替代SPSS的软体Salstat http://salstat.sourceforge.net/PSPP http://www.gnu.org/software/pspp/pspp.htmlR h ...
- 微信网页版APP - 网页微信客户端电脑版体验
微信网页版很早就出来了,解决了很多人上班不能玩手机的问题.微信电脑版-网页微信客户端,直接安装在桌面的微信网页版,免去了开浏览器的麻烦.双击就启动了,和其他的应用程序一样:运行过程中可以隐藏在桌面右下 ...
- 微信电脑版-微信for windows客户端发布
12月份微信Windows版客户端1.0 Alpha推出,昨天微信for windows 1.0客户端(测试版)发布更新,超过三亿人使用的聊天应用,现在登录Windows桌面.你可以在Windows上 ...
- 微信电脑版真的要来了 微信Windows版客户端1.0 Alpha推出
微信电脑版的搜索量一直很大,但只有网页版,之前也写了微信网页版APP - 网页微信客户端电脑版体验,在键盘上打字的感觉就是快.现在微信Windows版客户端1.0 Alpha推出了,来一睹芳容吧(20 ...
- 微信电脑版微信1.1 for Windows更新 可@人/转发撤回消息/可播小视频
微信电脑版微信1.1 for Windows发布更新了,版本号为1.1.0.18,群聊可@人/可转发撤回消息/可播小视频,功能越来越接近微信手机版了. 本次更新的一些新特点: 群聊中可以@人. 消息可 ...
- 微信电脑版也能用公众号自定义菜单 微信1.2 for Windows发布
昨日,微信电脑版发布更新,版本为微信1.2 for Windows,最大的特色就是加入了保存聊天记录功能,可以使用公账号菜单,手机上收藏的表情也能在电脑版上发送,可以接收转账消息. 本次微信pc版更新 ...
- 微信电脑版(Mac和Windows)安装
内容简介 1.微信Windows版 2.微信Mac版 3.总结优势 微信电脑版 众所周知,腾讯公司(马化腾先生执掌的巨头公司)开发的超成功App:微信.一经推出便引发业界轰动,使用人数更是直逼QQ. ...
随机推荐
- IOS疯狂基础之屏幕旋转控制,获得当前方向(转)
转自:http://blog.csdn.net/wudizhukk/article/details/8674393 获得当前屏幕方向 self.interfaceOrientation或[[UIApp ...
- Smobiler针对百度文字识别SDK动态编译与运行
下载百度ocr 在百度ocr平台下载android资源文档 文档地址:https://ai.baidu.com/docs#/OCR-Android-SDK/top sdk下载地址:http://ai. ...
- [b0036] python 归纳 (二一)_多进程数据共享和同步_服务进程Manager
# -*- coding: utf-8 -*- """ 多进程数据共享 服务器进程 multiprocessing.Manager 入门使用 逻辑: 20个子线程修改共享 ...
- Linux实现免密码登录
一.验证ssh远程登录,未作免密处理的两台机器,登录时,是需要输入密码的 二.本地系统执行 ssh-keygen -t rsa 命令,生成密钥文件 三.在相应的目录下查看生成的密钥文件,其中:id_r ...
- 使用odbc从notes中导数据,配置odbc时报错
上次在配置odbc从notes中导数据时一直报错(忘记是什么错误了),后来,尝试着把notes和notesSQL的路径加入到path中就OK了!
- Git 常用命令:
Git 常用命令: 1.git status #查看本地工作文件夹有哪些改动(和本地仓库对比),把差别列出. 2.git log #查看commit 的日志.(git log -2 只看最近2次的co ...
- Java 种15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁等等…
Java 中15种锁的介绍 1,在读很多并发文章中,会提及各种各样的锁,如公平锁,乐观锁,下面是对各种锁的总结归纳: 公平锁/非公平锁 可重入锁/不可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲 ...
- C++学习一 结构与结构体
结构体属于C++与C区别之一. 代码例子如下(来自<C++程序设计>): #include <iostream> #include <string> using n ...
- 鲜贝7.3--pycharm切换
在pycharm中切换python版本 打开软件会看到,这里有明显的红色提示错误.原因是当前使用的是python3.3,当执行print的时候,打印的文字需要小括号’()‘括起来. 在工具栏中找到这个 ...
- Flink/CEP/规则引擎/风控
基于 Apache Flink 和规则引擎的实时风控解决方案 对一个互联网产品来说,典型的风控场景包括:注册风控.登陆风控.交易风控.活动风控等,而风控的最佳效果是防患于未然,所以事前事中和事后三 ...