<strike id="g3zqm"></strike>

      <cite id="g3zqm"></cite>

        <tr id="g3zqm"><center id="g3zqm"></center></tr>
        <pre id="g3zqm"><sup id="g3zqm"></sup></pre>
        <li id="g3zqm"></li>
      1. 少妇高潮激情一区二区三,免费av深夜在线观看,亚洲狼人久久伊人久久伊,久久精品人人做人人爽电影蜜月,黄色特级片一区二区三区,欧美日韩在线亚洲二区综二,极品少妇无套内射视频,日本极品少妇videossexhd

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

        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.hengshangtqd.cn

        存檔

        主站蜘蛛池模板: 鲁鲁AV| 东京热亚洲色图| 在线免费观看毛片av| 色偷偷亚洲精品一区二区| 欧美日韩国产草草影院| 欧美日韩国产在线观看| 亚洲二级片| 国产不卡免费一区二区| 先锋影音资源站| 国产高清在线精品一区二区三区 | 中文字幕久久人妻| 亚洲成人黄色一级大片| 1769国内精品视频在线播放| 久久香蕉国产线看观看猫咪av| free性满足HD国产精品| 国产在线视频福利资源站| 亚洲国产综合av| 一本久道中文无码字幕av| 中文字幕人妻互换av久久| av一级高清一高清区综合| 亚洲精品不卡无码福利在线观看| 福利视频导航大全| 久久亚洲中文字幕伊人久久大| 国产精品一区二区三区日韩| 国产乱子伦真实精品!| 亚洲精品第一页| AV成人黄色电影网站| 免费人成视频网站在线观看不卡| 人妻中文字幕亚洲精品| 亚洲一区中文字幕| 妖精色av无码国产在线看| 国产精品1区2区3区在线播放| 色色午夜天| 午夜激情小视频一区二区| 亚洲看片| 卡一卡二精品| 欧美xxxx做受欧美gay| 男人和女人做爽爽视频| 亚洲精选av一区二区| 日韩有码中文字幕国产| 亚洲精品国产A久久久久久|