一个不简单的气球动画

用css3画出气球形状

<style>
*{padding:0;margin:0;}
body{background: #222;overflow: hidden;}
.balloon{
position: absolute;
width: 160px;
height: 160px;
background: #faf9f9;
border-radius: 160px 160px 64px 160px;
transform: rotate(45deg);
box-shadow: -8px -8px 80px -8px rgba(243,98,122,0.78) inset,36px 36px 24px rgba(243,98,122,0.28);
}
.balloon:after {
position: absolute;
display: block;
content: ‘‘;
width: 0;
height: 0;
border: 8px solid transparent;
border-right-color: rgba(243,98,122,0.88);
background: transparent;
transform: rotate(45deg);
border-radius: 16px;
bottom: -2px;
right: -2px;
}
</style>

<script>

var ww = window.innerWidth; //获取浏览器窗口宽度
var wh = window.innerHeight;
var bh = 160, bw = 160; //球的宽度高度
var num=10;
var timer = null;
init(num);
move();
timer = setInterval(move,30);

//1、利用js动态生成div,并初始化气球坐标
function init(num) {
for(var i=0;i<num;i++) {
var randomX = Math.floor(Math.random()*ww)-bw; //防止气球超出右边
randomX = Math.abs(randomX); //防止气球超出左边
var balloons = document.createElement("div");
balloons.className = ‘balloon‘;
balloons.style.top = wh-bh+‘px‘;
balloons.style.left = randomX+‘px‘;
balloons.speed = Math.random()*5+1; //气球上升随机速度
document.body.appendChild(balloons);
}
}

//2、让气球运动,并随机速度
function move() {
//获取创建后的气球
var balloons = document.querySelectorAll(‘.balloon‘);
//遍历改变top值
var len=balloons.length;
for(var i=0;i<len;++i) {
(function(i) { //IIFE:匿名函数自执行
balloons[i].style.top = balloons[i].offsetTop-balloons[i].speed+‘px‘;
balloons[i].onclick = function() { //延迟触发事件
boom.call(this,function() {
clearInterval(this.timer);
this.parentNode.removeChild(this);//移除元素自身
}.call(this)); //call:函数执行时刻改变this指向或者手动执行的时候
}
})(i)
}
}

//3、点击气球,气球动画消失
function boom(cb) {
this.timer = setInterval(function() { //定时器内部的this指向window
if(this.offsetWidth<10) {
cb&&cb(); //如果cb为真,则执行cb()
}
this.speed++;
this.style.width = this.offsetWidth-10+‘px‘;
this.style.height = this.offsetHeight-10+‘px‘;
this.style.top = this.offsetTop-this.speed+‘px‘;
}.bind(this),30) //bind:延迟触发的this绑定
}

总结:难点主要是在点击气球让气球消失的函数涉及到this作用域的绑定。另本实例代码并非本人原创,供交流学习!

时间: 2024-12-06 10:11:34

一个不简单的气球动画的相关文章

一个简单的loading动画,version 1.0

一个简单的loading动画:如图 点我查看

用 Swift 语言写一个地图坐标弹跳动画

模仿“一号专车”写一个坐标图标弹跳动画,实现效果如下:(录制有点闪小心狗眼) 分析这个动画如下:1.easeIn或者linear被抬高约30像素2.被弹性放下 然后开始了狗血的 Swift animation 之旅. 注意:因为我刚刚开始学习 iOS 开发,动画亦是刚刚接触,下面的方式仅仅是为了完成需求,下面的文章并没有解释动画实现的细节,也不太可能是实现这个需求的最好方式,仅仅是“实现了”而已,只作为一个参考.我还会继续探索里面的细节,以后在博客里更新. 第一步,实现 先抛开那些蛋疼的物理效果

WPF 一个弧形手势提示动画

这是一个操作提示动画,一个小手在屏幕上按照一个弧形来回运动<Window x:Class="LZRichMediaWall.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:LocWindow="clr-n

上下飘动的气球动画实现方式

//气球动画 function myfn(o,t){ var n=0; var status=0; setInterval(function(){ var top1=o.offset().top;//40 n++; if(status==0){ o.offset({top:top1+1}); }else{ o.offset({top:top1-1}); } if(n==20){ status=status==0 ? 1: 0; n=0; } },t); }; $('.cardList li').

一个栗子上手CSS3动画

最近杂七杂八的事情很多,很多知识都没来得及总结,是时候总结总结,开启新的篇章- 本篇文章不一一列举CSS3动画的属性,若需要了解API,可前往MDN 在开始栗子前,我们先补补基础知识. css3动画分类: 补间动画 – 具有连贯性的动画   逐帧动画 – 使用steps过渡方式实现跳跃  animation常用属性及场景: animation: name duration timing-function delay iteration-count direction; 1. timing-fun

[Material Design] 教你做一个Material风格、动画的按钮

前段时间Android L 发布了,相信看过发布会了解过的朋友都为其中的 “Material Design” 感到由衷的惊艳吧!至少我是的. 在惊艳之余感到由衷的遗憾,因为其必须在 ”Android L“ 上才能使用,MD,郁闷啊. 之后便自己想弄一个点击动画试试,此念头一发不可收拾:干脆一不做二不休,就重写了一个 ”MaterialButton“ 控件出来. 在这里不讨论什么是 :“Material Design” . 在这里将给大家分享一下我自己弄的 “Material Design” 风格

[Material Design] 教你做一个Material风格、动画的按钮(MaterialButton)

前段时间Android L 发布了,相信看过发布会了解过的朋友都为其中的 "Material Design" 感到由衷的惊艳吧!至少我是的. 在惊艳之余感到由衷的遗憾,因为其必须在 "Android L" 上才能使用,MD,郁闷啊. 之后便自己想弄一个点击动画试试,此念头一发不可收拾:干脆一不做二不休,就重写了一个 "MaterialButton" 控件出来. 在这里不讨论什么是 :"Material Design" . 在这

5.偶然看到的一个css加载动画

书上偶然看到的 先上一张素材 DOM <div class="loader"> </div> @keyframes loader{ to{background-position: -400px 0;} } .loader{ margin: 0 auto; width: 50px; height: 50px; background: url(img/loader.png) 0 0; background-size: cover; animation: loader

用贝塞尔曲线做的一个下拉刷新动画

以前就一直觉得ios 上的 mail 的下拉刷新的动画非常酷炫,但是一直不知道那种"滴虫"效果是怎么实现的.直到前段时间看到的贝塞尔曲线,感觉很神奇.如下图: 看起来和滴虫动画有点像,然后就花了点时间做了一个下拉刷新出来. 项目地址:https://github.com/ufo22940268/DropRefreshView 欢迎围观