CSS变量外加Paint API绘制透明格子实例页面

回到相关文章 »

效果:

调整尺寸:

代码:

CSS代码:
.box {
    width: 180px; height: 180px;
    --color1: #fff;
    --color2: #eee;
    --units: 8;
    background: paint(custom-grid);
}
                
HTML代码:
<div id="box" class="box">
    <p>调整尺寸:<input type="range" id="range" min="6" value="8" max="20"></p>
</div>
                
JS代码:
if (window.CSS) {
    CSS.paintWorklet.addModule('paint-grid.js');
}
// 改变尺寸变量
range.addEventListener('input', function () {
    box.style.setProperty('--units', this.value);        
});
                
paint-grid.js代码:
registerPaint('custom-grid', class {
    // 获取3个变量
    static get inputProperties() {
        return [
            '--color1',
            '--color2',
            '--units'
        ]
    }
    paint(context, size, properties) {
        // 两个格子颜色
        var color1 = properties.get('--color1').toString();
        var color2 = properties.get('--color2').toString();
        // 格子尺寸
        var units = Number(properties.get('--units'));
        // 横轴数轴循环遍历下
        for (var x = 0; x < size.width; x += units) {
            for (var y = 0; y < size.height; y += units) {
                context.fillStyle = (x + y) % (units * 2) === 0 ? color1 : color2;
                context.fillRect(x, y, units, units);
            }
        }
    }
});