棒呆!如何用css3实现烟花绽放效果

闲聊

就在上周六,我去听了一场分享会,分享会大概分享了几个大主题:

  • 如何及时在线上debug到错误信息,并且处理以及记录(window.onerror)
  • web动画实践以及技巧(mvp非他莫属,这也是今天我要和大家share的主题)
  • 前端自动化测试(wire mock的使用,讲真我还真没听懂多少。。)

短分享了几个小主题(15分钟内)

  • 数据基本类型以及引用类型
  • 矩阵算法(transform的原理等,好吧,这个我也没听懂多少。。我承认我菜)
  • jsBinding(oc与js的交互技术,额,好吧,oc我不懂,所以没怎么看懂)

例子

demo地址: 烟花

开始

一说到要做烟花绽放的这种动画,大家一开始想到的应该是用粒子动画的方式来实现,这样成本会比较高。而且网上一搜也是一大把这种demo,下面我们就试试用简单的几句css3来实现这个效果吧!

html

    <div class="bg">
        <div class="fire"></div>
        <div class="fire2"></div>
    </div>
复制代码

css

  body {
    background: #000;
  }
  .fire, .fire2 {
    background: url('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1528711658929&di=b1915568e41809ec716dd5fb197059bf&imgtype=0&src=http%3A%2F%2Fimg07.tooopen.com%2Fimages%2F20171215%2Ftooopen_sy_230419854445.jpg') no-repeat;
    background-size: contain;
    width: 200px;
    height: 200px;
    box-sizing: border-box;
    background-clip: content-box;
    border-radius: 100%;
  }

  .fire {
    animation: firing 1.5s ease infinte;
    -webkit-animation: firing 1.5s ease infinite;
  }

  .fire2 {
    animation: firing2 1.5s ease infinte;
    -webkit-animation: firing2 1.5s ease infinite;
  }

  @keyframes firing {
    0%{ padding: 80px; transform: scale(0.5) translateY(0); opacity:1;}
    75% { padding:0; transform: scale(1) translateY(0);}
    100%{ opacity:0; transform:scale(1) translateY(100px);}
  }

  @-webkit-keyframes firing {
    0%{ padding: 80px; -webkit-transform: scale(0.5) translateY(0); opacity:1;}
    75%{ padding:0;-webkit-transform: scale(1) translateY(0);}
    100%{ opacity:0;-webkit-transform:scale(1) translateY(100px);}
  }

  @keyframes firing2 {
    0%{ padding: 80px; -webkit-transform: scale(0.5) translate(0); opacity:1; }
    100%{ opacity: 0; -webkit-transform: scale(1); }
  }

  @-webkit-keyframes firing2 {
    0%{ padding: 80px; -webkit-transform: scale(0.5) translate(0); opacity:1; }
    100%{ opacity: 0; -webkit-transform:scale(1); }
  }

复制代码

结语

用了两种效果,一种是y轴有偏移,另一种是y轴没有偏移。 第一种方法多了一个烟花绽放后掉落的过程,是原大神的分享,第二种是最简单的实现方式,也算过渡自然。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
花绽放效果是一种非常美丽的视觉效果,可以通过前端的CSS和JavaScript来实现。下面是一个简单的实现方法: 1. HTML结构 首先,我们需要在HTML中定义一个容器,用来显示效果。在这个容器中,我们将创建一个`<canvas>`元素,并设置它的宽度和高度。 ```html <div id="firework-container"> <canvas id="firework-canvas" width="800" height="600"></canvas> </div> ``` 2. CSS样式 接下来,我们需要设置一些CSS样式,将容器居中,并将背景色设置为黑色。 ```css #firework-container { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: black; } ``` 3. JavaScript代码 最后,我们需要使用JavaScript来实现花绽放效果。具体实现方法如下: ```javascript // 获取canvas元素和上下文对象 var canvas = document.getElementById("firework-canvas"); var ctx = canvas.getContext("2d"); // 定义花粒子的数量 var numParticles = 100; // 定义花粒子的数组 var particles = []; // 定义花的颜色 var colors = ["red", "green", "blue", "yellow", "purple"]; // 定义花的初始位置 var originX = canvas.width / 2; var originY = canvas.height; // 定义花的半径 var radius = 5; // 创建花粒子 for (var i = 0; i < numParticles; i++) { particles.push({ x: originX, y: originY, color: colors[Math.floor(Math.random() * colors.length)], speed: Math.random() * 5 + 1, angle: Math.random() * Math.PI * 2 }); } // 定义动画函数 function animate() { // 清空画布 ctx.clearRect(0, 0, canvas.width, canvas.height); // 循环遍历花粒子 particles.forEach(function(particle) { // 更新粒子位置 particle.x += Math.cos(particle.angle) * particle.speed; particle.y += Math.sin(particle.angle) * particle.speed; // 绘制粒子 ctx.beginPath(); ctx.arc(particle.x, particle.y, radius, 0, Math.PI * 2); ctx.fillStyle = particle.color; ctx.fill(); }); // 如果粒子已经越过画布边界,则重新生成新的花 if (particles[0].y < 0) { particles = []; for (var i = 0; i < numParticles; i++) { particles.push({ x: originX, y: originY, color: colors[Math.floor(Math.random() * colors.length)], speed: Math.random() * 5 + 1, angle: Math.random() * Math.PI * 2 }); } } // 循环执行动画函数 requestAnimationFrame(animate); } // 开始执行动画函数 animate(); ``` 上面的代码中,我们首先获取了`<canvas>`元素和上下文对象,并定义了花粒子的数量、颜色、初始位置和半径。接着,我们使用`for`循环来创建花粒子,并将它们存储在一个数组中。 在动画函数中,我们先清空画布,然后循环遍历花粒子,更新它们的位置并绘制到画布上。如果粒子已经越过画布的上边界,则重新生成新的花。 最后,我们使用`requestAnimationFrame()`函数来循环执行动画函数,实现花绽放效果。 希望这个简单的例子能够帮助您理解如何使用前端的CSS和JavaScript来实现花绽放效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值