嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片

教你用面向?qū)ο缶幊虒懸粋€(gè)煙花爆炸的

2020-3-23    前端達(dá)人

點(diǎn)擊查看原圖



想要學(xué)會(huì)這個(gè)漂亮的煙花嗎?快來(lái)跟著學(xué)習(xí)吧~

結(jié)構(gòu)

<div class="container"></div>

我們只需要一個(gè)盒子表示煙花爆炸范圍就可以了

樣式

fire是煙花 注意添加絕對(duì)定位

 <style>
    .container{
        margin: 0 auto;
        height: 500px;
        width: 1200px;
        background: black;
        position: relative;
        overflow: hidden;
    }
    .fire{
        width: 10px;
        background: white;
        height: 10px;
        /* border-radius: 50%; */
        position: absolute;
        bottom: 0;
    }
    </style>



行為

編寫構(gòu)造函數(shù)Firework

需要用到一個(gè)鼠標(biāo)點(diǎn)擊的位置,一個(gè)div選擇器,一個(gè)爆炸樣式

 function Firework(x,y,selector,type){
        //此處獲取對(duì)象的方式為單例的思想,避免重復(fù)獲取相同的元素
        if(Firework.box && selector === Firework.box.selector){
            this.box =  Firework.box.ele;
        }else{
            Firework.box = {
                ele:document.querySelector(selector),
                selector:selector
            }
            this.box = Firework.box.ele;
        }
        this.type = type;
        this.init(x,y)
    }



封裝一個(gè)運(yùn)動(dòng)的方法
function animation(ele,attroptions,callback){
    for(var attr in attroptions){
        attroptions[attr] ={
            target:attroptions[attr],
            inow:parseInt(getComputedStyle(ele)[attr])
        } 
    }
    clearInterval(ele.timer);
    ele.timer = setInterval(function(){
        for(var attr in attroptions ){
            var item = attroptions[attr]
            var target = item.target;
            var inow = item.inow;
            var speed = (target - inow)/10;
            speed = speed>0?Math.ceil(speed):Math.floor(speed);
            if(Math.abs(target - inow) <= Math.abs(speed)){
                ele.style[attr] = target+"px";
                delete attroptions[attr];
                for(var num  in attroptions){
                    return false;
                }
                clearTimeout(ele.timer);
                if(typeof callback === "function")callback();
            }else{
                attroptions[attr].inow += speed;
                ele.style[attr]  = attroptions[attr].inow+"px";
            }
        }
    },30)
}



編寫原型方法
Firework.prototype = {
        constructor:Firework,
        //初始化
        init:function(x,y){
            //創(chuàng)建一個(gè)煙花
            this.ele = this.createFirework();
            //xy為鼠標(biāo)落點(diǎn)
            this.x = x ;
            this.y = y;
            //maxXy為最大運(yùn)動(dòng)范圍
            this.maxX = this.box.offsetWidth - this.ele.offsetWidth;
            this.maxY = this.box.offsetHeight - this.ele.offsetHeight;
            //初始化結(jié)束后  煙花隨機(jī)顏色
            this.randomColor(this.ele);
            //煙花升空
            this.fireworkUp(this.ele);
        },
        //創(chuàng)造煙花
        createFirework:function(){
            var ele = document.createElement("div");
            ele.className = "fire";
            this.box.appendChild(ele);
            return ele;
        },
        //煙花升空
        fireworkUp:function(ele){
            ele.style.left = this.x + "px";
            //此處用到剛剛封裝的運(yùn)動(dòng)方法
            animation(ele,{top:this.y},function(){
                ele.remove();
                this.fireworkBlast()
            }.bind(this));
        },
        //煙花爆炸
        fireworkBlast:function(){
            for(var i = 0 ; i < 20; i++){
                var ele = document.createElement("div");
                ele.className = "fire";
                ele.style.left = this.x + "px";
                ele.style.top = this.y + "px";
                this.box.appendChild(ele);
                ele.style.borderRadius = "50%";
                this.randomColor(ele);
                //判定一下輸入的爆炸方式是原型煙花 還是散落煙花 由此更改獲取的煙花位置
                animation(ele,this.type === "circle"?this.circleBlast(i,20): this.randomPosition(),function(cale){
                    cale.remove();
                }.bind(this,ele))
            }
        },
        //圓形爆炸位置
        circleBlast:function(i,total){
            var r = 200;
            var reg = 360 / total *i;
            var deg = Math.PI / 180 *reg;
            return {
                left:r * Math.cos(deg) + this.x ,
                top:r * Math.sin(deg) + this.y 
            }
        },
        //隨機(jī)顏色
        randomPosition:function(){
            return {
                left : Math.random()*this.maxX,
                top : Math.random()*this.maxY
            }
        },
        randomColor:function(ele){
            var color =  "#" + parseInt(parseInt("ffffff",16)*Math.random()).toString(16).padStart(6,0);
            return ele.style.backgroundColor = color;
        }
    }



綁定事件
document.querySelector(".container").addEventListener("click",function(evt){
    var e = evt||event;
    new Firework(e.offsetX,e.offsetY,".container","circle")
    new Firework(e.offsetX,e.offsetY,".container")
})

全部代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    .container{
        margin: 0 auto;
        height: 500px;
        width: 1200px;
        background: black;
        position: relative;
        overflow: hidden;
    }
    .fire{
        width: 10px;
        background: white;
        height: 10px;
        /* border-radius: 50%; */
        position: absolute;
        bottom: 0;
    }
    </style>
</head>
<body>
    <div class="container"></div>
    <script src="./utils.js"></script>
    <script>

    function animation(ele,attroptions,callback){
        for(var attr in attroptions){
            attroptions[attr] ={
                target:attroptions[attr],
                inow:parseInt(getComputedStyle(ele)[attr])
            } 
        }
        clearInterval(ele.timer);
        ele.timer = setInterval(function(){
            for(var attr in attroptions ){
                var item = attroptions[attr]
                var target = item.target;
                var inow = item.inow;
                var speed = (target - inow)/10;
                speed = speed>0?Math.ceil(speed):Math.floor(speed);
                if(Math.abs(target - inow) <= Math.abs(speed)){
                    ele.style[attr] = target+"px";
                    delete attroptions[attr];
                    for(var num  in attroptions){
                        return false;
                    }
                    clearTimeout(ele.timer);
                    if(typeof callback === "function")callback();
                }else{
                    attroptions[attr].inow += speed;
                    ele.style[attr]  = attroptions[attr].inow+"px";
                }
            }
        },30)
    }  

        function Firework(x,y,selector,type){
            if(Firework.box && selector === Firework.box.selector){
                this.box =  Firework.box.ele;
            }else{
                Firework.box = {
                    ele:document.querySelector(selector),
                    selector:selector
                }
                this.box = Firework.box.ele;
            }
            this.type = type;
            this.init(x,y)
        }

        Firework.prototype = {
            constructor:Firework,
            //初始化
            init:function(x,y){
                this.ele = this.createFirework();
                this.x = x ;
                this.y = y;
                this.maxX = this.box.offsetWidth - this.ele.offsetWidth;
                this.maxY = this.box.offsetHeight - this.ele.offsetHeight;
                this.randomColor(this.ele);
                this.fireworkUp(this.ele);
            },
            //創(chuàng)造煙花
            createFirework:function(){
                var ele = document.createElement("div");
                ele.className = "fire";
                this.box.appendChild(ele);
                return ele;
            },
            fireworkUp:function(ele){
                ele.style.left = this.x + "px";
                animation(ele,{top:this.y},function(){
                    ele.remove();
                    this.fireworkBlast()
                }.bind(this));
            },
            //煙花爆炸
            fireworkBlast:function(){
                for(var i = 0 ; i < 20; i++){
                    var ele = document.createElement("div");
                    ele.className = "fire";
                    ele.style.left = this.x + "px";
                    ele.style.top = this.y + "px";
                    this.box.appendChild(ele);
                    ele.style.borderRadius = "50%";
                    this.randomColor(ele);
                    animation(ele,this.type === "circle"?this.circleBlast(i,20): this.randomPosition(),function(cale){
                        cale.remove();
                    }.bind(this,ele))
                }
            },
            circleBlast:function(i,total){
                var r = 200;
                var reg = 360 / total *i;
                var deg = Math.PI / 180 *reg;
                return {
                    left:r * Math.cos(deg) + this.x ,
                    top:r * Math.sin(deg) + this.y 
                }
            },
            randomPosition:function(){
                return {
                    left : Math.random()*this.maxX,
                    top : Math.random()*this.maxY
                }
            },
            randomColor:function(ele){
                var color =  "#" + parseInt(parseInt("ffffff",16)*Math.random()).toString(16).padStart(6,0);
                return ele.style.backgroundColor = color;
            }
        }

        document.querySelector(".container").addEventListener("click",function(evt){
            var e = evt||event;
            new Firework(e.offsetX,e.offsetY,".container","circle")
            new Firework(e.offsetX,e.offsetY,".container")
        })
    </script>
</body>
</html>

————————————————
版權(quán)聲明:本文為CSDN博主「SpongeBooob」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_41383900/article/details/105026768


日歷

鏈接

個(gè)人資料

存檔

嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片
<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 久久蜜桃香蕉精品一区二区三区| 久久激情一区| 激情欧美一区二区三区在线观看| 一区电影在线观看| 亚洲精品日韩一| 久久久久久久激情视频| 性久久久久久久久久久久| 欧美另类综合| 亚洲国产日韩一区| 在线成人www免费观看视频| 欧美一区二区三区免费在线看| 一区二区三区福利| 欧美精品久久久久久久久久| 农夫在线精品视频免费观看| 国产主播一区二区| 久久成人精品一区二区三区| 欧美一站二站| 国产欧美一级| 欧美一区二区三区在线播放| 欧美亚洲一区二区在线观看| 国产精品久久久久婷婷| 夜夜嗨av一区二区三区| 在线一区二区三区四区| 欧美日韩一区二区三区免费| 亚洲激情女人| 亚洲神马久久| 欧美视频官网| 亚洲在线观看视频| 欧美一区二区三区四区在线| 国产精品一区久久久| 亚洲欧美日产图| 久久久久久自在自线| 黑人巨大精品欧美黑白配亚洲 | 亚洲免费在线观看| 午夜精品福利在线| 国产情人节一区| 久久精品青青大伊人av| 麻豆久久婷婷| 亚洲另类一区二区| 欧美视频中文字幕在线| 亚洲一区二区三区在线| 久久精品五月婷婷| 最新国产の精品合集bt伙计| 欧美精品久久99| 国内久久精品| 久久视频国产精品免费视频在线| 欧美~级网站不卡| 日韩视频免费观看| 国产精品性做久久久久久| 欧美中文在线字幕| 亚洲国产欧美一区| 亚洲欧美日韩精品一区二区| 国产一区二区三区视频在线观看| 久久精品欧美日韩精品| 亚洲激情在线视频| 欧美中文字幕在线观看| 在线观看视频一区二区| 欧美喷水视频| 久久av在线| 日韩视频―中文字幕| 久久激情视频久久| 日韩五码在线| 国产有码一区二区| 欧美日韩一区二区免费在线观看| 香蕉av福利精品导航| 亚洲国产精品视频| 久久er99精品| 一本色道久久综合一区| 国内精品视频666| 欧美日本一区| 麻豆av一区二区三区| 亚洲综合视频网| 亚洲精一区二区三区| 久久色中文字幕| 午夜欧美视频| 一二三区精品| 亚洲激情一区二区| 国产小视频国产精品| 欧美日韩亚洲一区二区三区在线 | 国产精品综合色区在线观看| 欧美暴力喷水在线| 欧美在线观看视频一区二区三区| 亚洲日本中文字幕免费在线不卡| 久久婷婷国产综合尤物精品| 亚洲欧美电影在线观看| 亚洲免费观看高清在线观看| 狠狠色丁香婷婷综合久久片| 国产精品日韩精品| 欧美日本一区| 欧美激情网友自拍| 久久精品一区蜜桃臀影院 | 欧美大片在线看| 久久久噜噜噜久久中文字免| 亚洲欧美高清| 亚洲欧美日本另类| 亚洲网站视频福利| 在线性视频日韩欧美| 亚洲免费观看视频| 亚洲毛片一区二区| 亚洲看片一区| 亚洲美女av在线播放| 91久久精品一区二区三区| 欧美福利小视频| 欧美二区在线看| 欧美激情亚洲激情| 亚洲大片在线观看| 亚洲国产精品一区二区第四页av| 欧美激情中文字幕在线| 欧美成人中文| 亚洲国产网站| 国产一区二区三区高清| 国产精品专区一| 国产精品一区二区三区久久久| 国产精品视频网址| 国产一级揄自揄精品视频| 国产一区二区av| 在线播放不卡| 亚洲人人精品| 亚洲图片欧洲图片日韩av| 亚洲欧美国产77777| 欧美在线网站| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美成人乱码一区二区三区| 亚洲第一精品夜夜躁人人躁| 亚洲啪啪91| 亚洲在线国产日韩欧美| 久久成人国产| 欧美久久综合| 国产精品视频一区二区高潮| 国产中文一区二区| 亚洲人体1000| 午夜精品亚洲| 另类春色校园亚洲| 亚洲欧洲日夜超级视频| 一本色道久久88精品综合| 香港久久久电影| 欧美丰满高潮xxxx喷水动漫| 欧美三区在线视频| 国产综合色在线| 99综合电影在线视频| 午夜国产不卡在线观看视频| 久热爱精品视频线路一| 亚洲人成人一区二区三区| 亚洲女女做受ⅹxx高潮| 久久夜色精品国产欧美乱极品| 欧美日韩一区综合| 在线播放豆国产99亚洲| 亚洲线精品一区二区三区八戒| 久久九九精品99国产精品| 亚洲韩国青草视频| 欧美一区二区免费| 欧美精品在线一区二区| 国产一区二区三区日韩欧美| 一区二区av| 美女主播一区| 亚洲一区二区三区四区中文| 免费不卡在线视频| 国产日产欧美一区| 一本一本久久a久久精品综合麻豆| 久久精视频免费在线久久完整在线看| 亚洲国产91| 久久人体大胆视频| 国产麻豆综合| 亚洲一区二区三区在线看| 免费久久99精品国产| 亚洲欧美色婷婷| 欧美日韩美女在线| 亚洲三级视频| 蜜臀久久99精品久久久久久9| 亚洲欧美99| 国产精品高潮呻吟| 日韩视频免费在线观看| 欧美激情精品久久久| 久久久久9999亚洲精品| 国产伦精品一区二区三区四区免费| 99re在线精品| 亚洲国产一区二区精品专区| 久久免费精品视频| 狠狠色综合播放一区二区| 欧美一级视频一区二区| 亚洲手机在线| 国产精品电影在线观看| 亚洲线精品一区二区三区八戒| 亚洲国产日韩欧美在线图片| 鲁大师影院一区二区三区| 狠狠爱综合网| 六月婷婷一区| 久久久久久久欧美精品| 永久久久久久| 免费日本视频一区| 麻豆精品视频在线观看| 亚洲成人在线视频播放| 女生裸体视频一区二区三区| 久久久久九九九| 在线成人免费视频| 欧美大色视频| 欧美日本国产| 亚洲综合日韩在线| 午夜精品视频在线| 国内精品视频在线播放|