鱼C论坛

 找回密码
 立即注册
楼主: 不二如是

[庖丁解牛] 0 0 6 5 - Canvas粒子动画 - 只挖待填

[复制链接]
发表于 2019-4-11 15:38:48 | 显示全部楼层
学习HTML5中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-5 13:02:29 | 显示全部楼层
123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-3 17:51:08 | 显示全部楼层
想看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-12 10:46:23 | 显示全部楼层
复制了老师的代码,但是并不能生成雪花的效果,参考了前面师兄的代码,修改了一下就可以了。
具体修改在备注中有注释,供后来者参考。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Canvas</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        html,body{
            height: 100%;
        }
        #firstCanvas{
            background-color: #000;

        }
    </style>

</head>
<body>
<canvas id="firstCanvas" width="999" height="666">大兄弟你的浏览器不支持Canvas!!!</canvas>
<script type="text/javascript">
    var canvas=document.getElementById("firstCanvas");
    var context=canvas.getContext("2d");
    var particles = [];
    for( var i = 0; i < 666; i++ ) {
        particles.push( {
            x: Math.random()*window.innerWidth,
            y: Math.random()*window.innerHeight,
            vx: (Math.random()-.5),
            vy: (Math.random()-.5),
            size: 1+Math.random()*3,
            color: "#DDD"
        } )
    }
    function timeUpdate(){
        context.clearRect(0, 0, window.innerWidth, window.innerHeight);
        var len = particles.length;
        var particle;
        for( var i = 0; i < len; i++ ) {
            particle = particles[i];
            particle.x += particles[i].vx;//此处particle.vx应改为particles[i].vx
            particle.y += particles[i].vy;//此处particle.vy应改为particles[i].vy
            
            if(particle.x<=0 || particle.x>=window.innerWidth){
                particle.vx *= -1;
            }
            if(particle.y<=0 || particle.y>=window.innerHeight){
                particle.vy *= -1;
            }
            context.fillStyle = particle.color;
            context.beginPath();
            context.arc(particle.x,particle.y,particle.size,0,Math.PI*1.99);//true应该去掉
            context.closePath();
            context.fill();
        }
    }
    setInterval( timeUpdate, 40 );
</script>
</body>
</html>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-7 11:48:11 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-7 18:44:10 | 显示全部楼层
谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-29 20:10:20 | 显示全部楼层
。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-31 19:13:57 | 显示全部楼层
直接复制不二老师的代码出不来效果的可以看我的分析
图1红色框圈住的名字必须一致(可以命名其他,但必须一致)图2绿色框圈住的名字也必须一致蓝色框是缺少的代码[i]剩下看图更改,注意style里面也要添加内容
test.png 图1
test_2.png 图2
我的效果图
test_3.png
我的代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>粒子动画</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        html,body{
            height: 100%;
        }
        #firstCanvas{
            background-color: #7700ff;
        }
    </style>

</head>
<body>
    <canvas id="firstCanvas" width="999" height="666">大兄弟你的浏览器不支持Canvas!!!</canvas>

    <script type="text/javascript" >
        var canvas = document.getElementById("firstCanvas");//调用Canvas元素
        var context=canvas.getContext("2d");//返回一个对象
        var parcticles = [];
        for(var i = 0; i < 666; i++ )
        {
            parcticles.push( {
                x: Math.random() * window.innerWidth,
                y: Math.random() * window.innerHeight,
                vx: (Math.random()-.3), //横向随机
                vy: (Math.random()-.3),//纵向随机
                size: 1 + Math.random()*3,
                color: "#DDD"
            } );
        }
        function timeUpdate(){
            context.clearRect(0, 0, window.innerWidth, window.innerHeight); //第一步先清理画布
            var len = parcticles.length;
            var parcticle;
            for( var i = 0; i < len; i++ ) { //循环遍历所有的雪花
                var parcticle = parcticles[i];
                parcticle.x += parcticles[i].vx;
                parcticle.y += parcticles[i].vy;
                //下面都是边界检查,防止雪花跑出屏幕
                if(parcticle.x<=0 || parcticle.x>=window.innerWidth){
                    parcticles[i].vx *= -1;
                }
                if(parcticle.y<=0 || parcticle.y>=window.innerHeight){
                    parcticles[i].vy *= -1;
                }
                context.beginPath();//开始绘制//
                context.arc(parcticle.x,parcticle.y,parcticle.size,0,Math.PI*1.99);//绘制图形
                context.closePath();//停止绘制
                context.fillStyle = parcticle.color;//设置雪花为上面设置的#DDD
                context.fill();//对所有绘制好的图形,进行上色
            }
        }
        setInterval( timeUpdate, 40 );
    </script>
</body>
</html>


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2020-4-2 03:06:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-10 11:35:30 | 显示全部楼层
效果图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 16:59:20 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 22:41:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-3 16:40:08 | 显示全部楼层
a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-14 07:44:35 | 显示全部楼层
没效果呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-20 17:49:19 | 显示全部楼层
11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-20 11:23:37 | 显示全部楼层
kk
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-14 20:36:07 From FishC Mobile | 显示全部楼层
我想知道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-29 17:25:41 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-9 08:08:22 | 显示全部楼层
66666666666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-22 17:47:28 | 显示全部楼层
123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 13:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表