美文网首页
CSS Houdini 绘制星空

CSS Houdini 绘制星空

作者: _____西班木有蛀牙 | 来源:发表于2018-07-04 23:25 被阅读44次
// index.html
<!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>Document</title>
    <style>
        body {
            margin: 0;
            color: #fff;
            font-size: 24px;
            background: #000;
        }
        body::before {
            content: '';
            position: absolute;
            width: 100%;
            height:100%;
            left:0;
            top: 0;
            --start-density: 0.8;
            --start-opacity: 1;
            background-image: paint(skyDemo);
            animation: shine 1s linear alternate infinite;
        }
        @keyframes shine {
            from {
                opacity: 1;
            }
            to {
                opacity: 0.3;
            }
        }
    </style>
</head>
<body>
    <script>
        if (!CSS in window || !CSS.paintWorklet) {
            document.write('不支持 Houdini');
        } else {
            CSS.paintWorklet.addModule('sky.js')
        }
    </script>
</body>
</html>
// sky.js
class Sky {
    constructor () {
        this.starts = [];
    }
    static get inputProperties () {
        return ['--start-density', '--start-opacity']
    }
    paint (ctx, paintSize, properties) {
        let xMax = paintSize.width;
        let yMax = paintSize.height;
        ctx.fillRect(0, 0, xMax, yMax);
        let starDensity = properties.get('--start-density').toString() || 1;
        // 修正星星的密度
        starDensity > 1 && (starDensity = 1);
        // 设置数量
        let allStarts = Math.round((xMax + yMax) * starDensity);
        for (let i = 0; i < allStarts; i++) {
            let x = Math.floor(Math.random() * xMax + 1);
            let y = Math.floor(Math.random() * yMax + 1);
            let size = Math.floor(Math.random() * 2 + 1);
            // 设置透明度
            const opacityOne = Math.floor(Math.random() * 9 + 1);
            const opacityTwo = Math.floor(Math.random() * 9 + 1);
            const hue = Math.floor(Math.random() * 360 + 1)
            const opacity = +('.' + (opacityOne + opacityTwo)) * starDensity;
            ctx.fillStyle = `hsla(${hue}, 30%, 50%, ${opacity})`;
            ctx.fillRect(x, y, size, size);
        }
    }
}

registerPaint('skyDemo', Sky);

相关文章

  • CSS Houdini 绘制星空

  • CSS Houdini实现动态波浪纹

    CSS Houdini 号称 CSS 领域最令人振奋的革新。CSS 本身长期欠缺语法特性,可拓展性几乎为零,并且新...

  • 娱乐 | CSS Houdini

    今天在网上瞎逛时看到了一个关键词 CSS Houdini,CSS 又出什么新东西了? CSS 我知道,但后面的 H...

  • css绘制三角形和对号

    CSS绘制三角形 div css 效果 CSS绘制对号 div css 效果

  • CSS绘制网格背景

    CSS绘制网格背景 CSS 代码 预览图

  • CSS @property属性实现了什么?

    1.@property是什么 @property 是 CSS Houdini API 的一部分, 它允许开发者显式...

  • CSS-绘制各种基本图形

    最近被问到如何用CSS绘制一个圆,解决这个问题的同时引发了我对CSS绘制图形的兴趣。今天汇总一下CSS绘制的各种基...

  • css三角制作

    第一类:通过使用border绘制 第二类:通过css样式的渐变绘制 第三类: 使用canvas进行绘制,不算css

  • mxgraph

    前端绘制图形有3种方式: HTML + CSS canvas svg 前端绘制图形优缺HTML + CSS简单。C...

  • 绘制对话框

    Time: 20200131 三角形的绘制 HTML CSS样式 对话框的绘制 HTML CSS样式 显示效果 END.

网友评论

      本文标题:CSS Houdini 绘制星空

      本文链接:https://www.haomeiwen.com/subject/buxuuftx.html