canvas

本文详细介绍了Canvas的基本属性设置、兼容性特点、元素获取,以及矩形、三角形、圆形绘制,还包括渐变、文本、阴影、图像绘制等高级功能。适合前端开发者深入理解并实践HTML5 Canvas技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

canvas

属性

width、height只能在标签中设置,在css样式中设置画布会变形

兼容性

标签中的文字只在低版本浏览器上显示(IE6/7/8),在高版本浏览器看不到文字

获取画布元素
//获取canvas
var canvas = document.getElementById('CANVAS').getContext('2d');
绘制矩形
//设置颜色
canvas.fillStyle = 'pink'
//设置矩形的方法
canvas.fillRect(0,0,300,300)
绘制三角形
//开始的位置
canvas.moveTo(50,50)
//线的位置
canvas.lineTo(200,50)
canvas.lineTo(50,200)
//结束连接
canvas.closePath()
//绘制边的颜色
canvas.strokeStyle = 'red'
//绘制空心三角
canvas.stroke()
//绘制实心边颜色
canvas.fillStyle = 'pink'
//绘制实心三角
canvas.fill()
绘制圆形
//开始绘制
canvas.beginPath()
//arc有六个参数,分别是X(圆的中心的X坐标),Y(圆的中心的Y坐标),R(半径),起始角的弧度,终止角的弧度,可选,规定应该逆时针还是顺时针绘图。False = 顺时针(默认),true = 逆时针
//弧度和角的js表达式 弧度 = (Math.PI/180)*角度
canvas.arc(250,250,250,0,Math.PI*2)
//结束绘制
canvas.closePath()
//实心圆
canvas.fill()
//空心圆
canvas.stroke()
绘制端点
canvas.beginPath()
canvas.moveTo(50,50)
canvas.lineTo(100,100)
//绘制端点两头形状
canvas.lineCap = 'round/square'
//设置线条的宽度
canvas.lineWidth = 5
线条相交的形状
//相交是圆
canvas.lineJoin = 'round'
//平的
canvas.lineJoin = 'bevel'
//默认
canvas.lineJoin = 'miter'
绘制弧线
//从起点开始绘制弧线,到(x2,y2)结束,radius:弧度
canvas.lineWidth = 5;
canvas.beginPath();
canvas.moveTo(50,50);
canvas.arcTo(100,50,100,100,50);
canvas.stroke();
二次贝塞尔曲线
quadraticCurveTo(cp1x, cp1y, x, y)
//绘制二次贝塞尔曲线,cp1x,cp1y为一个控制点,x,y为结束点。

使用二次贝塞尔曲线绘制对话气泡

function draw() {
  var canvas = document.getElementById('canvas');
  if (canvas.getContext) {
    var ctx = canvas.getContext('2d');

    // 二次贝塞尔曲线
    ctx.beginPath();
    ctx.moveTo(75, 25);
    ctx.quadraticCurveTo(25, 25, 25, 62.5);
    ctx.quadraticCurveTo(25, 100, 50, 100);
    ctx.quadraticCurveTo(50, 120, 30, 125);
    ctx.quadraticCurveTo(60, 120, 65, 100);
    ctx.quadraticCurveTo(125, 100, 125, 62.5);
    ctx.quadraticCurveTo(125, 25, 75, 25);
    ctx.stroke();
   }
}

在这里插入图片描述

三次贝塞尔曲线
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
绘制三次贝塞尔曲线,cp1x,cp1y为控制点一,cp2x,cp2y为控制点二,x,y为结束点。

使用三次贝塞尔曲线绘制心形

在这里插入图片描述

线性渐变
//起始坐标终止坐标
var gradient = canvas.createLinearGradient(0,0,500,500)
//颜色停止点
gradient.addColorStop(0,'red')
gradient.addColorStop(.5,'green')
gradient.addColorStop(1,'yellow')
canvas.fillStyle = gradient
镜像渐变
//开始的x,y轴和圆的半径到结束的x,y轴和圆的半径
var gradient = canvas.createRadialGradient(250,250,10,250,250,250);
gradient.addColorStop(0,'red')
gradient.addColorStop(.5,'green')
gradient.addColorStop(1,'yellow')
canvas.fillStyle = gradient
绘制文本
//要写的文字,x轴和y轴,最大像素宽度(可选)
canvas.fillText('慕',100,100,100)
//搭配
canvas.font = "normal 50px Yahei";
canvas.textAlign = "start";
canvas.strokeStyle = "red"
绘制阴影
//shadowColor:表示颜色
canvas.shadowColor = "red";
//shadowOffsetX:表示x方向的偏移量
canvas.shadowOffsetX = 5;
//shadowOffsetY:表示y方向的偏移量
canvas.shadowOffsetY = 5;
//shadowBlur:表示模糊度
canvas.shadowBlur = 5;
绘制图像
//图片,x,y轴,宽和高
var img = new Image();
img.src = "./2.jpg";
img.onload = function(){
	canvas.drawImage(img,0,0,200,200);
}

案例:实现黑客帝国风格

<script>
        var w = document.documentElement.clientWidth;
        var h = document.documentElement.clientHeight;
        var canvas = document.getElementById('canvas');
        canvas.width = w;
        canvas.height = h;
        var ctx = canvas.getContext('2d');
        var fontSize = 40
        var clos = Math.floor(w / fontSize)
        var num = []
        for (var i = 0; i < clos; i++) {
            num.unshift(0)
        }
        function draw() {
            ctx.fillStyle = 'rgba(0,0,0,0.05)'
            ctx.fillRect(0,0,w,h)
            var str = '慕';
            ctx.font = '600 ' + fontSize + 'px 微软雅黑'
            ctx.fillStyle = '#0AE642'
            for (let i = 0; i < clos; i++) {
                let y = num[i] * fontSize;
                let x = i * fontSize;
                ctx.fillText(str, x, y);
                num[i]++;
                if(y > h && Math.random() > 0.99){
                    num[i] = 0
                }
            }
        }
        setInterval(draw,30)
    </script>

在这里插入图片描述

完整canvas教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一刻不学习就是15分钟

对您有用就行,别钱不钱的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值