• 一个不简单的气球动画


    用css3画出气球形状

    <style>
    *{padding:0;margin:0;}
    body{background: #222;overflow: hidden;}
    .balloon{
    position: absolute;
    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: '';
    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作用域的绑定。另本实例代码并非本人原创,供交流学习!

  • 相关阅读:
    Excel导出工具
    载入Properties文件中的配置项信息
    对list进行排序-重写排序规则
    Mysql 5.7版本报错 1055
    SVN客户端与服务端安装详解
    持续集成的理解
    js 日期格式化
    mysql多个时间戳字段默认值问题
    eclipse svn插件地址
    orientationchange移动端横竖屏切换属性
  • 原文地址:https://www.cnblogs.com/pjl43/p/6869359.html
Copyright © 2020-2023  润新知