canvas绘制重复图案

    canvas的createPattern()可以用于绘制重复图案,它可以接收image元素、canvas元素或video元素作为图案参数,并且可以传入如何重复图案的字符串参数:

  • repeat    ——    为整个区域绘制重复图案
  • repeat-x    ——    只在x方向绘制重复图案
  • repeat-y    ——    只在y方向绘制重复图案
  • no-repeat    ——    不重复,只绘制一张图案

    来看一个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>绘制重复图案</title>
    <style>
        body {
            background: #eee;
        }
        #canvas {
            background: #fff;
            cursor: pointer;
            margin-left: 10px;
            margin-top: 10px;
            -webkit-box-shadow: 4px 4px 8px rgba(0,0,0,0.5);
            -moz-box-shadow: 4px 4px 8px rgba(0,0,0,0.5);
            box-shadow: 4px 4px 8px rgba(0,0,0,0.5);
        }
    </style>
</head>
<body>
    <select id="selectRepeat">
        <option value="repeat">repeat</option>
        <option value="repeat-x">repeat-x</option>
        <option value="repeat-y">repeat-y</option>
        <option value="no-repeat">no-repeat</option>
    </select>
    </br>
    <canvas id="canvas" width="600" height="400"></canvas>

    <script>
        let canvas = document.getElementById('canvas');
        let context = canvas.getContext('2d');
        let selectRepeat = document.getElementById('selectRepeat');
        let image = new Image();
        image.src = "./images/二哈.jpg";

        // 为选项框元素绑定事件,用户可以选择绘制图案的方式
        selectRepeat.addEventListener('change', (event) => {
            let repeat = event.target.value;        // 重复图案的方式
            drawPattern(repeat);
        });

        function drawPattern(repeat){
            // 创建CanvasPattern对象
            let pattern = context.createPattern(image, repeat);
            // 将新创建的CanvasPattern对象赋值给fillStyle属性
            context.fillStyle = pattern;
            // 清除画布
            context.clearRect(0, 0, canvas.width, canvas.height);
            // 绘制图案
            context.fillRect(0, 0, canvas.width, canvas.height);
        }

        image.addEventListener('load', () => {
            drawPattern("repeat");
        });
    </script>
</body>
</html>

    效果:

    需要注意的是,一定要确保图片已经加载完毕了,再开始调用createPattern()函数,否则会报错!

    比较有趣的一点是,canvas绘图环境中的fillStyle属性可以接受css颜色字符串,CanvasGradient对象(用于设置渐变色)以及本文所讲的CanvasPattern对象。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值