[JS] 气球放气效果

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="keywords" content="">
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" >
        <meta name="description" content="" >
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            html{
                width: 100%;
                height: 100%;
            }
            body{
                width: 100%;
                height: 100%;/*相对于父级的100%  父级是html*/
                position: relative;/*相对定位 父级*/
                overflow: hidden;
                background: #222;
            }
            .balloon{
                position: absolute;/*绝对定位*/
                top: 0;
                left: 0;
                height: 160px;
                width: 160px;
                margin: 0 auto;
                background: #faf9f9;
                box-shadow: -8px -8px 80px -8px rgba(234,80,122,0.6) inset;/*横向 纵向 羽化 大小 颜色*/
                border-radius:160px 160px 64px 160px;/*圆角属性 左上 右上 右下 左下 (顺时针)*/
                transform: rotate(45deg);
                -webkit-transform: rotate(45deg);
            }
            .balloon::after{/*伪元素  不存在的 css创建出来的元素**/
                position: absolute;
                bottom: 0;
                right: 0;
                content: ‘‘;/*开启伪元素*/
                display: block;
                width: 0;
                height: 0;
                border: 8px solid transparent;/*四边透明*/
                border-right-color: rgba(234,98,122,.8);/*设置右边边框*/
                transform: rotate(45deg);
                -webkit-transform: rotate(45deg);
            }
        </style>
    </head>
    <body>

    </body>
</html>
<script type="text/javascript">
    //js 基于原型的动态解释性 脚本语言
    /**
     * 1 .响应用户操作 点击鼠标
     * 2 .操作页面DOM节点 增删改查 css样式
     * 3 .数据交互 ajax json 正则表达式
     * 4 .封装插件 框架 mvc mvvm augular vue node.js
     */
    /**
     * 1 .利用js动态生成div  并且初始化气球的坐标
     *      1.生成几个
     *      2.怎么生成
     * 2 .气球动起来
     *      1 .改变气球top
     *   2 .在一定时间内一直减少top值
     *
     *
     * 3 .点击气球,爆炸
     *      1. 点击-放气动画
     *   2. 删除
     * 知识点: querySelector  querySelectorAll   (h5 api 兼容ie8)
     * call  函数执行的时候  改变函数内部this指向为当前环境下的this
     * bind  硬绑定当前延时触发函数的内部this指向为当前环境下的this
     *
     * 【进阶】 迭代 递归 函数 词法作用域
     * */
    var num = 10;/*气球数量*/
    var wW = window.innerWidth;//浏览器宽度
    var wH = window.innerHeight;
    var bW = 160;//气球宽度
    var timer = null;//初始化定时器
    init();
    timer = setInterval(move,30);
    function init(){
        for(var i = 0;i<10;i++){
            var randomX = Math.floor(Math.random()*wW)-bW;
            randomX = Math.max(0,randomX);//限制left最小为0
            var oBalloon = document.createElement(‘div‘);
            oBalloon.className = ‘balloon‘;//添加类名
            oBalloon.style.left = randomX+‘px‘;
            oBalloon.style.top = wH - bW + ‘px‘;
            oBalloon.speed = Math.random()*4+1;//自定义属性
            document.body.appendChild(oBalloon);//添加到body

            oBalloon.onclick = function(){
                boom.call(this,function(){
                    clearInterval(this.timer);//移除定时器
                    this.parentNode.removeChild(this);
                });//call 转移this指向
                //this.parentNode.removeChild(this);
            }
        }
    }
    /*
     * 气球运动
     */
    function move(){
        var oBalloons = document.querySelectorAll(‘.balloon‘);
        for(var i=0,len=oBalloons.length;i<len;i++){
            oBalloons[i].style.top = oBalloons[i].offsetTop - oBalloons[i].speed+‘px‘;
        }
    }

    function boom(callback){//气球放气动画
        var This = this;
        this.timer = setInterval(function(){//setInterval里面的this指向widown    相当于window.setInterval
            if(this.offsetWidth<10){
                console.log(‘delete‘)
                callback&&callback.call(this);
            }
            this.speed = this.speed + 1;//速度递加
            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);
    }
</script>
时间: 2024-08-06 19:32:19

[JS] 气球放气效果的相关文章

js拖拽效果实现

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head>    <meta

图片切换特效(1):原生JS图片切换效果

转自:http://www.codefans.net/jscss/code/4699.shtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

JS图片切换效果

源地址:http://www.codefans.net/jscss/code/4699.shtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"&g

js实现手风琴效果

之前在慕课网上有练习手风琴效果,但是老师使用jquery简简单单的两三行实现了,今天自己用js练习一下效果 <div id="divbox"> <ul> <li class="pic1"><a href="javascript:;">床头明月光</a></li> <li class="pic2"><a href="javascr

原生JS实现分页效果1.0

不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>原生JS实现分页效果</title> <style> body{ margin:100px 200px; } #page{ margin:20px 0; } #

JS 之手风琴效果

<!DOCTYPE html> <html> <head> <meta charset= "utf-8" /> <title></title> <meta content= " "  />  <meta content= " "  /> <style> #c{width:500px;height:300px;overflow:hidden;

js元素闪动效果

<img src="http://yjy.allbring.com/UpLoadFiles/head/p1_20140326104945_17-10164142709.jpg"  style=" position:relative;"  id="aa" />function setAnimation() { var attr = ["top", "left"], b = 0; u = setIn

React.js实现原生js拖拽效果及思考

一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖拽效果. 首先,其实拖拽效果的思路是很简单的.主要就是三个步骤: 1.onmousedown的时候,启动可拖拽事件,记录被拖拽元素的原始坐标参数. 2.onmousemove的时候,实时记录鼠标移动的距离,结合被拖拽元素第一阶段的坐标参数,计算并设置新的坐标值. 3.onmouseup的时候,关闭可拖拽事件

原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)

虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>原生JS实现分页效果</title> <style> body{ margin:100px 200px; } #page{ m