美文网首页
Canvas-雪花飘落

Canvas-雪花飘落

作者: ShineaSYR | 来源:发表于2020-08-10 18:35 被阅读0次

近期在学习Canvas的相关知识,偶然想起,在之前的校招面试过程中,面试官有让我手写过雪花飘落的代码。参考了网上的代码(见最下方源码),自己理解了一下~

雪花创建的过程和雪花飘动的过程,让我想起之前同事聊到关于canvas绘制的问题。

1.避免重复绘制

按钮—点击花瓣

按钮会被多次点击,一次点击假设会生成40个花瓣,连续多次点击,页面花瓣生成数量就会变得很多,同事引入一个回收机制,当生成的花瓣生命值为0的时候,将其初始位置再次随机,控制页面的花瓣数量不会超过100个。

首页-花瓣

2.控制方向

如上方的gif示意,想要模拟被风吹下的效果,要控制方向,同事将横坐标和纵坐标分别设置加速度,纵向的加速度较大于横坐标,使其成抛物线运动即可。

源码:

<!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>
</head>
<body>
    <canvas id="cvsSnow">
        This device is not support Canvas.
    </canvas>
</body>
<script>
    let cvSN = document.getElementById("cvsSnow");
    let snCtx = cvSN.getContext('2d');
    let snW = window.innerWidth, snH = window.innerHeight;
    cvSN.width = snW;
    cvSN.height = snH;
    let snNum = 100;
    let snRadius = [];
    
    for(let i = 0; i < snNum; i++) {
        snRadius.push({
            x: Math.random() * snW,
            y: Math.random() * snH,
            r: Math.random() * 7
        });
    }

    function DrawSnow(){
        snCtx.clearRect(0, 0, snW, snH);
        snCtx.beginPath();
        for(let i = 0; i < snNum; i++){
            let p = snRadius[i];
            snCtx.moveTo(p.x, p.y);
            // context.arc(x, y, radius, startAngle, endAngle [, anticlockwise]);
            // x/y——圆弧横/纵坐标,radius——圆弧半径,startAngle/endAngle——开始/结束弧度(2π为完整圆),anticlockwise——顺时针逆时针
            snCtx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);
            snCtx.fillStyle = "pink";
        }
        snCtx.fill();
        snCtx.stroke();
        SnowFall();
        snCtx.closePath();
    }
    
    // 雪花飘落
    function SnowFall(){
        for(let i = 0; i < snNum; i++){
            let p = snRadius[i];
            p.y += Math.random() * 50 + 1;
            if(p.y > snH){
                p.y = 0;
            }
            p.x += Math.random() * 50 + 1;
            if(p.x > snW){
                p.x = 0;
            }
        }
    }
    setInterval(DrawSnow, 100);
</script>
</html>

相关文章

  • Canvas-雪花飘落

    近期在学习Canvas的相关知识,偶然想起,在之前的校招面试过程中,面试官有让我手写过雪花飘落的代码。参考了网上的...

  • 雪花飘落

    雪花似玉正在悄然飘落 纷纷扬扬飘落江河湖泊 放眼不见渔翁岸边垂钓 但见水上船舶穿行如梭 雪花似玉正在悄然飘落 纷纷...

  • 雪花飘落

    天,越来越阴了,以至于近中午时分竟暗得像傍晚。风,徐徐吹着,越吹越紧,吹落了那树枝上最后一枚坚守的树叶,吹走了爱...

  • 雪花   飘落

    《雪》 ——木 你坐在火旁,轻轻翻开我为你写的诗句。 慢慢回忆,随风飘去的欢乐, 回忆起它们。 像雪花一样,捧在手...

  • 雪花飘落

    ▌雪花飘落 文|佚岛 看见雪,我就是一朵雪花一朵雪花落在爷爷肩上一朵雪花飘向远方于是江山明明白白,一座桥也明明白白...

  • 雪花飘落

    我站在窗前,窗外正飘飞着雪花。雪花被风裹挟着,拍打着玻璃,我想可能它们想要进屋里来吧。但是屋里这么暖和,我打开窗让...

  • 雪花飘落

    雪花飘飘满天飞舞,风堆起一道一道的沟壑形成大雪堆,小雪堆,小村显得遥远,大地显得沉默,地上白了,房子上白了,雪花飘落着。

  • canvas基础知识总结

    一、Canvas-绘制文字 1、属性 二、canvas-设置阴影 三、canvas-创建路径-绘制矩形和圆形 1、...

  • 雪花飞舞飘落

    哈尔滨的冬天遍地都是雪,那种遍地的白给人一种神圣而不可侵犯的感觉。长而宽的马路中央一个男人静静的躺在那里,从他身体...

  • 雪花在飘落

    一大清早,阿远就起了床:今天要去市里参加一个重要的婚礼。 洗漱,还特意洗了头,往头上抹了发乳,往脸上抹了润肤霜,对...

网友评论

      本文标题:Canvas-雪花飘落

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