前端教程

Canvas画板实现

2018-03-04  本文已影响93人  前端徐徐

步骤及方法

1.首先建立canvas画板

<canvas id="draw" width="800" height="800"></canvas>

canvas元素创造了一个固定大小的画布,它公开了一个或多个渲染上下文,其可以用来绘制和处理要展示的内容。

2.渲染上下文

const canvas = document.querySelector('#draw');
const ctx = canvas.getContext('2d');

canvas起初是空白的。为了展示,首先脚本需要找到渲染上下文,然后在它的上面绘制。canvas元素有一个叫做 getContext() 的方法,这个方法是用来获得渲染上下文和它的绘画功能。getContext()只有一个参数,上下文的格式,参数现在唯一的合法值为2d。

(1)document.querySelector()方法来为<canvas>元素得到DOM对象。

返回值

返回文档中匹配指定的选择器组的第一个元素(使用深度优先先序遍历文档的节点 | 并且通过文档标记中的第一个元素,并按照子节点数量的顺序迭代顺序节点)。

语法
element = document.querySelector(selectors);

element 是一个 element 对象(DOM 元素)。
selectors 是一个字符串,包含一个或是多个 CSS 选择器 ,多个则以逗号分隔。

(2)getContext()方法来访问绘画上下文

返回值

返回一个用于在画布上绘图的环境。

语法
Canvas.getContext(contextID);

参数 contextID 指定了您想要在画布上绘制的类型。当前唯一的合法值是 "2d",它指定了二维绘图,并且导致这个方法返回一个环境对象,该对象导出一个二维绘图 API。
提示:在未来,如果canvas 标签扩展到支持 3D 绘图,getContext() 方法可能允许传递一个 "3d" 字符串参数。

3.初始画板

//声明canvas画板的宽度和高度
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
//strokeStyle属性设置笔触颜色
ctx.strokeStyle = '#BADA55';
//设置或返回两条线相交时,所创建的拐角类型为圆
ctx.lineJoin = 'round';
//设置或返回线条的结束端点样式为圆
ctx.lineCap = 'round';
//设置或返回当前的线条宽度
ctx.lineWidth = 50;

let isDrawing = false;
//初始化起始点位置
let lastX = 0;
let lastY = 0;
//初始HSL色彩模式的H值为0
let hue = 0;
let direction = true;

4.设置画笔的方法

function draw(e){
    if(!isDrawing){
    return;
    }
    console.log(e);
    //利用HSL色彩模式设置触笔颜色
    ctx.strokeStyle = `hsl(${hue},100%,50%)`;
    // 起始一条路径
    ctx.beginPath();
    // 起始点
    ctx.moveTo(lastX,lastY);
    // 结束点
    ctx.lineTo(e.offsetX,e.offsetY);
    //绘制已定义的路径
    ctx.stroke();
    //更新lastX和lastY的值
    [lastX,lastY] = [e.offsetX,e.offsetY];

    // 因为H的值是从0到360的变化,超过360时恢复到0重新累加
    hue++;
    if(hue >= 360){
    hue = 0;
    }
// 控制笔触的宽度在1到50之间
    if(ctx.lineWidth >= 50 || ctx.lineWidth <= 1){
    direction = !direction;
    }
    if(direction){
    ctx.lineWidth++;
    }else{
    ctx.lineWidth--;
    }
}

5.给canvas添加监听事件

canvas.addEventListener('mousedown',(e) => {
    isDrawing = true;
    [lastX,lastY] = [e.offsetX,e.offsetY];
});

canvas.addEventListener('mousemove',draw);
canvas.addEventListener('mouseup',() => isDrawing = false);
canvas.addEventListener('mouseout',() => isDrawing = false);

至此,任务完成。

上一篇下一篇

猜你喜欢

热点阅读