亚洲av午夜福利精品一区人妖,亚洲乱码日产精品a级毛片久久,91精品视频观看,青草青草久热精品视频在线观看

教你用面向對象編程寫一個煙花爆炸的

2020-3-23    前端達人

點擊查看原圖



想要學會這個漂亮的煙花嗎?快來跟著學習吧~

結構

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

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

樣式

fire是煙花 注意添加絕對定位

 <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>



行為

編寫構造函數Firework

需要用到一個鼠標點擊的位置,一個div選擇器,一個爆炸樣式

 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)
    }



封裝一個運動的方法
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){
            //創建一個煙花
            this.ele = this.createFirework();
            //xy為鼠標落點
            this.x = x ;
            this.y = y;
            //maxXy為最大運動范圍
            this.maxX = this.box.offsetWidth - this.ele.offsetWidth;
            this.maxY = this.box.offsetHeight - this.ele.offsetHeight;
            //初始化結束后  煙花隨機顏色
            this.randomColor(this.ele);
            //煙花升空
            this.fireworkUp(this.ele);
        },
        //創造煙花
        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")
})

全部代碼

<!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);
            },
            //創造煙花
            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>

————————————————
版權聲明:本文為CSDN博主「SpongeBooob」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_41383900/article/details/105026768


日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

亚洲av午夜福利精品一区人妖,亚洲乱码日产精品a级毛片久久,91精品视频观看,青草青草久热精品视频在线观看
<strike id="cy2gs"><menu id="cy2gs"></menu></strike>
  • <del id="cy2gs"><dfn id="cy2gs"></dfn></del>
  • 一本色道久久综合亚洲精品高清| 免费成人在线观看视频| 亚洲高清一二三区| 影视先锋久久| 韩日欧美一区| 1024日韩| 亚洲国产精品一区二区第四页av | 亚洲激情一区| 国产精品亚洲欧美| 经典三级久久| 激情视频一区二区三区| 极品裸体白嫩激情啪啪国产精品| 在线日韩av永久免费观看| 亚洲人成在线播放| 在线视频日本亚洲性| 亚洲一级黄色av| 欧美一区影院| 男女激情久久| 欧美日韩三级一区二区| 国产精品视频不卡| 激情五月综合色婷婷一区二区| 亚洲国产精品专区久久| 一本久久a久久精品亚洲| 午夜一区不卡| 媚黑女一区二区| 国产精品99一区| 国产亚洲制服色| 亚洲人成网在线播放| 亚洲一区二区三区在线| 久久精品欧美日韩| 麻豆久久婷婷| 欧美日韩一区二区三区在线看| 国产精品美女xx| **性色生活片久久毛片| 亚洲一区免费观看| 久久青青草综合| 欧美午夜剧场| 亚洲高清视频在线| 午夜精品999| 欧美大片va欧美在线播放| 国产精品日日做人人爱 | 亚洲三级影片| 午夜老司机精品| 欧美成人一区二免费视频软件| 国产精品久久久久三级| 亚洲第一精品福利| 亚洲视频在线看| 久久综合久久综合这里只有精品| 欧美婷婷在线| 亚洲国产成人av| 午夜一级久久| 欧美日韩国产探花| 极品av少妇一区二区| 亚洲午夜久久久久久久久电影院| 久久综合久久综合久久| 国产精品亚洲第一区在线暖暖韩国| 亚洲国产精品va在线看黑人| 午夜精品在线看| 欧美日韩福利| 在线精品一区二区| 午夜亚洲伦理| 欧美体内she精视频| 激情婷婷欧美| 欧美亚洲尤物久久| 欧美日韩视频不卡| 亚洲大胆女人| 欧美一区二区网站| 国产精品久久久久久超碰| 亚洲国产精品久久久久秋霞蜜臀 | 狠狠色狠狠色综合日日tαg| 在线中文字幕日韩| 嫩模写真一区二区三区三州| 国产欧美日韩亚洲精品| 一区二区三区鲁丝不卡| 欧美bbbxxxxx| 国内一区二区三区| 午夜国产精品视频| 欧美天堂亚洲电影院在线播放 | 亚洲视频二区| 免费看的黄色欧美网站| 国产麻豆成人精品| 亚洲图片欧洲图片av| 欧美成在线视频| 在线观看国产精品淫| 久久成人亚洲| 国产九九精品| 亚洲小少妇裸体bbw| 欧美理论电影在线播放| 91久久精品国产91久久| 玖玖玖免费嫩草在线影院一区| 国产色视频一区| 亚洲欧美日韩国产综合在线 | 欧美先锋影音| 亚洲靠逼com| 欧美多人爱爱视频网站| 影音先锋亚洲视频| 久久久久久久综合| 国产色视频一区| 欧美亚洲视频| 国产精品视频一二| 亚洲午夜伦理| 国产精品久久久对白| 在线一区二区三区做爰视频网站| 欧美激情第9页| 亚洲国产精品综合| 免费观看成人网| 亚洲电影免费在线| 免费日韩av片| 亚洲精品乱码久久久久| 欧美激情视频在线播放| 亚洲精品亚洲人成人网| 欧美激情综合网| 99综合精品| 国产精品高精视频免费| 亚洲尤物在线视频观看| 国产精品高潮在线| 亚洲欧美日本在线| 国产偷久久久精品专区| 久久九九电影| 在线看片日韩| 欧美激情1区2区3区| 99热在这里有精品免费| 欧美视频在线观看一区| 亚洲夜晚福利在线观看| 国产精品区一区| 欧美一区网站| 在线看成人片| 欧美日韩成人在线观看| 亚洲一卡二卡三卡四卡五卡| 国产精品色午夜在线观看| 欧美在线观看www| 伊人久久亚洲热| 欧美精品一区二区三区很污很色的 | 一区二区黄色| 国产精品成人免费| 香蕉久久一区二区不卡无毒影院| 国产一区亚洲| 美女视频一区免费观看| 亚洲精品久久久久久下一站 | 久久久久久网站| 亚洲欧洲免费视频| 国产精品久久久久9999高清| 久久精品1区| 亚洲精品视频免费观看| 国产精品久久久久久久7电影| 欧美专区亚洲专区| 亚洲精品国产精品乱码不99按摩| 国产精品99一区二区| 欧美在线视频免费| 亚洲人成亚洲人成在线观看| 欧美午夜精品久久久久久浪潮| 欧美怡红院视频| 亚洲精品久久久蜜桃| 国产欧美视频一区二区| 久久资源av| 亚洲一品av免费观看| 在线免费高清一区二区三区| 欧美日韩一区不卡| 亚洲精品一区二| 国产精品一区二区女厕厕| 久热精品视频在线免费观看| 亚洲午夜电影| 亚洲国产91精品在线观看| 国产精品久久久久91| 免费久久精品视频| 亚洲欧美日韩电影| 亚洲精品视频一区| 国产专区精品视频| 欧美日韩视频在线一区二区观看视频 | 亚洲国产99精品国自产| 国产精品久久久久久久久久久久| 久久综合九色综合欧美就去吻| 亚洲深夜福利在线| 悠悠资源网亚洲青| 国产精品日韩专区| 欧美精品自拍| 久久久夜色精品亚洲| 亚洲一区二区影院| 亚洲激情中文1区| 国产欧美一区二区三区久久| 欧美精品在线网站| 久久视频一区| 午夜在线成人av| 一区二区三区**美女毛片| 在线免费观看一区二区三区| 国产精品一区二区三区久久| 欧美精品高清视频| 久久一区免费| 午夜亚洲福利在线老司机| 在线综合+亚洲+欧美中文字幕| 91久久精品日日躁夜夜躁欧美| 国产自产高清不卡| 国产精品影音先锋| 欧美天天综合网| 欧美日韩国产限制| 欧美α欧美αv大片| 久久久另类综合| 午夜精品一区二区三区电影天堂 | 中文在线资源观看网站视频免费不卡| 1000精品久久久久久久久|