使用canvas实现雪花飘动效果的示例代码


Posted in HTML / CSS onMarch 30, 2021

今天我们就使用canvas来实现雪花飘落的效果❄️

一、canvas是什么?

HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.

<canvas> 标签只是图形容器,您必须使用脚本来绘制图形。

你可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。

二、canvas的基本用法

1.创建一个画布(Canvas)

<canvas id="myCanvas" width="200" height="100"></canvas>

2.使用JavaScript绘制图像

//首先找到<canvas>元素
var c=document.getElementById("myCanvas");
//然后创建context对象
var ctx=c.getContext("2d");
//下面的两行代码绘制一个红色的矩形:
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);

getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

设置fillStyle属性可以是CSS颜色,渐变,或图案。fillStyle 默认设置是#000000。

3.Canvas 坐标

canvas 是一个二维网格。
canvas 的左上角坐标为 (0,0)
ctx.fillRect(0,0,150,75);
上面的 fillRect 方法拥有参数 (0,0,150,75)。
意思是:在画布上绘制 150x75 的矩形,从左上角开始 (0,0)。

4.Canvas - 路径

moveTo(x,y) 定义线条开始坐标
lineTo(x,y) 定义线条结束坐标
在canvas中绘制圆形, 我们将使用以下方法:

arc(x,y,r,start,stop)

使用arc() 画一个圆

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.arc(95,50,40,0,2*Math.PI);
ctx.stroke();

三、实现雪花飘动的思路

1.创建一个画布(Canvas)

var canvas =document.getElementById("canvas")
    //参数 contextID 指定了您想要在画布上绘制的类型。
    //当前唯一的合法值是 "2d",它指定了二维绘图,
    //并且导致这个方法返回一个环境对象,该对象导出一个二维绘图 API。
    var context = canvas.getContext("2d")
    var w =window.innerWidth
    var h =window.innerHeight
    canvas.width = w;
    canvas.height =h;

2.创建雪花的对象数组

var count =200 //雪花的个数
    var snows=[] //雪花对象数组
    for (var i=0 ; i< count;i++){
        snows.push({
            x:Math.random()*w,//Math.random()用于生成0~1的随机数
            y:Math.random()*h,
            r:Math.random()*5,
        })
    }

3.绘制雪花样式

function draw(){
        context.clearRect(0,0,w,h)
        context.beginPath()
        for(var i=0; i<count;i++){
            var snow = snows[i];//遍历每一片雪花
            context.fillStyle ="rgb(255,255,255)" //设置雪花的样式
            context.shadowBlur=10;
            context.shadowColor="rgb(255,255,255)";
            //moveTo 的方法是可以移动到指定的坐标
            context.moveTo(snow.x,snow.y)
            // 使用canvas arc()创建一个圆形
             //x,y,r:圆的中心的x坐标和y坐标,r为半径
            //0,Math.PI * 2起始弧度和结束弧度
            
            context.arc(snow.x,snow.y,snow.r,0,Math.PI * 2)
            
        }
        //画布填充
        context.fill()
        move()
    }

4.实现雪花飘动

function move(){
        for (var i=0;i<count;i++){
            var snow =snows[i];
            snow.y +=(7-snow.r)/10 //从上往下飘落
            snow.x+=((5-snow.r)/10)//从左到右飘落
            if(snow.y>h){
                snows[i]={
                    x:Math.random()*w,
                    y:Math.random()*h,
                    r:Math.random()*5,
                }
            }
        }
    }

5.设置刷新

draw()
    //每毫秒刷新一次
 setInterval(draw,1)

6.完整代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>雪花飘飘之使用canvas元素用于在网页上绘制图形。</title>
 
 <style type="text/css">
  *{
            margin:0;
            padding:0;
            /* background-color: seagreen; */
            background: url("雪人.jpg")  no-repeat;
            background-size:100% 100%;
        }
  /* .can{
            filter: blur(1px);
        } */
 </style>
</head>
<body>
 <canvas id="canvas" class="can"></canvas>

 <script type="text/javascript">
    //canvas 元素用于在网页上绘制图形。
 var canvas =document.getElementById("canvas")
    //参数 contextID 指定了您想要在画布上绘制的类型。
    //当前唯一的合法值是 "2d",它指定了二维绘图,
    //并且导致这个方法返回一个环境对象,该对象导出一个二维绘图 API。
    var context = canvas.getContext("2d")
    var w =window.innerWidth
    var h =window.innerHeight
    canvas.width = w;
    canvas.height =h;
    var count =200 //雪花的个数
    var snows=[] //雪花对象数组
    for (var i=0 ; i< count;i++){
        snows.push({
            x:Math.random()*w,//Math.random()用于生成0~1的随机数
            y:Math.random()*h,
            r:Math.random()*5,
        })
    }
    //绘制雪花
    function draw(){
        context.clearRect(0,0,w,h)
        context.beginPath()
        for(var i=0; i<count;i++){
            var snow = snows[i];//遍历每一片雪花
            context.fillStyle ="rgb(255,255,255)" //设置雪花的样式
            context.shadowBlur=10;
            context.shadowColor="rgb(255,255,255)";
            //moveTo 的方法是可以移动到指定的坐标
            context.moveTo(snow.x,snow.y)
            // 使用canvas arc()创建一个圆形
             //x,y,r:圆的中心的x坐标和y坐标,r为半径
            //0,Math.PI * 2起始弧度和结束弧度
            
            context.arc(snow.x,snow.y,snow.r,0,Math.PI * 2)
           
            
        }
        //画布填充
        context.fill()
        move()
    }
    //雪花飘动
    function move(){
        for (var i=0;i<count;i++){
            var snow =snows[i];
            snow.y +=(7-snow.r)/10 //从上往下飘落
            snow.x+=((5-snow.r)/10)//从左到右飘落
            if(snow.y>h){
                snows[i]={
                    x:Math.random()*w,
                    y:Math.random()*h,
                    r:Math.random()*5,
                }
            }
        }
    }
    draw()
    //每毫秒刷新一次
 setInterval(draw,1)
 </script>
</body>
</html>

使用canvas实现雪花飘动效果的示例代码

总结

到此这篇关于使用canvas实现雪花飘动效果的示例代码的文章就介绍到这了,更多相关canvas雪花飘动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
基于css3实现漂亮便签样式
Mar 18 HTML / CSS
纯css3(无图片/js)制作的几个社交媒体网站的图标
Mar 21 HTML / CSS
使用CSS3来匹配横屏竖屏的简单方法
Aug 04 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
Jan 08 HTML / CSS
Html5如何唤起百度地图App的方法
Jan 27 HTML / CSS
HTML5本地存储之Web Storage应用介绍
Jan 06 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
Jun 09 HTML / CSS
HTML5几个设计和修改的页面范例分享
Sep 29 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
Mar 22 HTML / CSS
HTML5实现可缩放时钟代码
Aug 28 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
Sep 15 HTML / CSS
深入理解margin塌陷和margin合并的解决方案
Jun 26 HTML / CSS
利用html+css实现菜单栏缓慢下拉效果的示例代码
CSS实现多个元素在盒子内两端对齐效果
Html5页面播放M4a音频文件
Html分层的box-shadow效果的示例代码
原生CSS实现文字无限轮播的通用方法
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
CSS3通过var()和calc()函数实现动画特效
You might like
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
PHP字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
Bootstrap精简教程
2015/11/27 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
Python内置函数delattr的具体用法
2017/11/23 Python
python如何实现内容写在图片上
2018/03/23 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
社区综治宣传月活动总结
2014/07/02 职场文书
代收款委托书范本
2014/10/01 职场文书
婚宴新娘致辞
2015/07/28 职场文书
简短清晨问候语
2015/11/10 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
python状态机transitions库详解
2021/06/02 Python
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js