我们先看一下效果图

用canvas画连续的线段。首先要明白canvas是怎么用的,这里画直线主要用到了以下几个接口:
- ctx.
-canvas = document.getElementById(“myCanvas”) :获取对应的CanvasRenderingContext2D对象(画笔)
- ctx = canvas.getContext(“2d”) :getContext()指定了参数2d这里表示绘制2d图形
- ctx.beginPath():开始绘制一个路径
- ctx.strokeStyle = “red”:确定画出路径的颜
- ctx.moveTo(a, b):绘制起点坐标,坐标为(a,b)
- ctx.lineTo(a, b):绘制终点目标,坐标为(a,b)
- ctx.stroke():进行整个线段的着色,这个时候线段才可见(注意必须在关闭路径前着色)
- ctx.closePath():关闭绘制路径
更多的canvas知识可以参考网址简书 HTML5 Canvas 学习和canvas API学习
代码部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-COMPATIBLE" content="IE=edge,chrome=1"/>
<title>full-screen</title>
<script src="index.js" charset="utf-8"></script>
<style>
*{
margin:0px;
padding:0px;
cursor:crosshair;
}
#dd{
width:1300px;
height: 700px;
margin: 0 auto;
}
#myCanvas{
background-color: #c9c9c9;
}
</style>
</head>
<body>
<div id="dd">
<canvas id="myCanvas" width=1300px height="700px">
您的浏览器不支持canvas标签。
</canvas>
</div>
</body>
</html>
以上是页面的html文件部分,着这里我定义个一个canvas画布,并将其设置为页面居中显示,这里要注意的是canvas的默认大小是300px*150px,如果在css中对canvas的宽和高进行限定是就会出现拉伸的情况,这里最好在定义画布的时候就限定宽和高,或者可以用js操作DOM对其宽和高进行修改。
/**
* Created by bigding on 2016/7/4.
*/
var begin = false,posi_num = 0;
var posi = new Array(); //定义位置数组
for(var i = 0; i<100 ; i++){
posi[i] = new Array(0,0);
//console.log(i);
}
window.onload= function () {
var screen = document.getElementById("myCanvas"); //获取元素
var ctx,mouseX,mouseY;
screen.onclick = function (event) {
mouseX=getMousePos(1,event); //获取当前鼠标点击的横纵位置
mouseY=getMousePos(2,event);
//console.log("X:"+mouseX+"\tY:"+mouseY+"\tnum:"+posi_num);
posi[posi_num][0] = mouseX; //将点击的位置存入数组中
posi[posi_num][1] = mouseY;
drawLine(posi_num);
posi_num++;
}
}
function getMousePos(num,event) { //获取位置信息
var e = event || window.event;
var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; //屏幕滚动像素
var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
if(num == 1) return e.clientX;
else return e.clientY;
}
function drawLine(num){
var canvas = document.getElementById("myCanvas"); //获取元素
var ctx;
if(canvas.getContext) {
//获取对应的CanvasRenderingContext2D对象(画笔)
ctx = canvas.getContext("2d");
//开始一个新的绘制路径
ctx.beginPath();
//设置线条颜色为黑色
ctx.strokeStyle = "red";
if(num == 0){} //绘制直线线段起始坐标点
// ctx.moveTo(posi[num][0], posi[num][1]);
else{
//绘制直线线段到指定坐标点
ctx.lineTo(posi[num-1][0], posi[num-1][1]);
ctx.lineTo(posi[num][0], posi[num][1]);
ctx.lineWidth = 5;
ctx.stroke();
}
//先关闭绘制路径。注意,此时将会使用直线连接当前端点和起始端点。
//ctx.closePath();
}
}
上面这段代码是用js控制canvas的部分。
- 开始部分定义了一个二维的数组用于存放已有的点的坐标位置。
- 当页面已经载入时就会调用windows.onload(这里也以用jQuery的$(document).deady来控制,更好)。下面就是获取点击屏幕是点的坐标,然后再将其打印在屏幕上。
- 获取鼠标位置用了event.clientX/enevt.clientY获取当前点击位置距离浏览器窗口的位置,再用scrollY = document.documentElement.scrollTop || document.body.scrollTop以及var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft获取纵向滚动条和横向滚动条的偏移量,并将其用于修正想相对于屏幕的距离,使其成为想对于文档最左上角的距离。
- drawLine()函数就是将当前点击的点连同之前的点画在屏幕上。
欢迎大家指正与讨论
版权声明:本文为In_computer原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。