使用HTML5做个画图板的方法介绍


Posted in HTML / CSS onMay 03, 2013

首先要说明的是这里不是用鼠标画画,而是在触摸设备上用手指,比如ipad。

做画图板,自然使用html5的canvas来实现了。在canvas中我们可以画圆,画矩形,画自定义的线条等等。这次主要使用的画圆跟画线条来实现。html中支持对触摸事件的响应。

onTouchStart 触摸开始

onTouchMove 触摸滑动

onTouchEnd 触摸结束

有了这些事件,我们实现用手指在浏览器里画画就很简单了。

IPAD上的效果:

使用HTML5做个画图板的方法介绍

思路:当手指触摸到屏幕的时候在onTouchStart 事件中在手指触摸的位置上添加一个圆;当手指开始滑动的时候在onTouchMove中不断的从上一个触摸点到下一个点画线条。

HTML:

复制代码
代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></p> <p><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Canvas</title>
<meta name = "viewport" content = "width = device-width, user-scalable = no">
</head>
<body>
<canvas id="canvas" ></canvas>
<script type="text/javascript" src="canvasScript.js" charset="utf-8"></script>
</body>
</html>

JS:
复制代码
代码如下:

//get canvas
var canvas = document.getElementById("canvas");
//full screen
canvas.width=window.innerWidth;
canvas.height=window.innerHeight;
//是否支持触摸
var touchable = 'createTouch' in document;
if (touchable) {
canvas.addEventListener('touchstart', onTouchStart, false);
canvas.addEventListener('touchmove', onTouchMove, false);
}
else
{
alert("touchable is false !");
}
//上一次触摸坐标
var lastX;
var lastY;</p> <p>var ctx =canvas.getContext("2d");
ctx.lineWidth=10;//画笔粗细
ctx.strokeStyle="#FF0000";//画笔颜色</p> <p>//触摸开始事件
function onTouchStart(event) {
event.preventDefault();
lastX=event.touches[0].clientX;
lastY=event.touches[0].clientY;
drawRound(lastX,lastY);</p> <p>}
//触摸滑动事件
function onTouchMove(event) {
try
{
event.preventDefault();
drawLine(lastX,lastY,event.touches[0].clientX,event.touches[0].clientY);
lastX=event.touches[0].clientX;
lastY=event.touches[0].clientY;
}
catch(err){
alert( err.description);
}</p> <p>}</p> <p>//画圆
function drawRound(x,y)
{
ctx.fillStyle="#FF0000";
ctx.beginPath();
ctx.arc(x,y,5,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
}
//画线
function drawLine(startX,startY,endX,endY)
{
ctx.beginPath();
ctx.lineCap="round";
ctx.moveTo(startX,startY);
ctx.lineTo(endX,endY);
ctx.stroke();
}

关键点:

ctx.lineCap="round"; 设置所画线条结束的样式帽为圆形。这个很关键,不然在线条角度变化大的地方会出现断带。

使用HTML5做个画图板的方法介绍

event.preventDefault();取消事件的默认动作。在滑动事件中一定要调这个方法。不然滑动时就会触发浏览器默认的滑动事件,就会发生页面下拉的效果,你就画不了画喽。

HTML / CSS 相关文章推荐
CSS3 3D制作实战案例分析
Sep 18 HTML / CSS
CSS3中的5个有趣的新技术
Apr 02 HTML / CSS
CSS3等相关属性制作分页导航实现代码
Dec 24 HTML / CSS
纯css3使用vw和vh实现自适应的方法
Feb 09 HTML / CSS
详解如何用canvas画一个微笑的表情
Mar 14 HTML / CSS
HTML5中实现拖放效果无须借助javascript
Dec 26 HTML / CSS
利用html5 canvas破解简单验证码及getImageData接口应用
Jan 25 HTML / CSS
简单介绍HTML5中的文件导入
May 08 HTML / CSS
HTML5学习笔记之html5与传统html区别
Jan 06 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
Dec 19 HTML / CSS
CSS实现背景图片全屏铺满自适应的3种方式
Jul 07 HTML / CSS
如何解决flex文本溢出问题小结
Jul 15 HTML / CSS
基于第一个PhoneGap(cordova)的应用详解
May 03 #HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
Apr 25 #HTML / CSS
HTML5 本地存储之如果没有数据库究竟会怎样
Apr 25 #HTML / CSS
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
Apr 25 #HTML / CSS
基于HTML5 FileSystem API的使用介绍
Apr 24 #HTML / CSS
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
Apr 24 #HTML / CSS
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
Apr 24 #HTML / CSS
You might like
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
php中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
phpfpm的作用和用法
2019/10/10 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
python获取外网ip地址的方法总结
2015/07/02 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
基于python实现操作redis及消息队列
2020/08/27 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
介绍下Java中==和equals的区别
2013/09/01 面试题
乡镇创先争优活动总结
2014/08/28 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
检察院起诉意见书
2015/05/20 职场文书
追悼会悼词大全
2015/06/23 职场文书