国产精品美女久久久浪潮AV,国产精品三级一二三区,久久精品国产一区二区小说 ,依依成人影视国产精品,全部无卡免费的毛片在线看,日本一区二区三深夜不卡,国产精品女同一区二区久久,国产精品夜色一区二区三区

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

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

        存檔

        主站蜘蛛池模板: 亚洲制服丝袜无码av在线| 三年片大全| 97久人人做人人妻人人玩精品| 中文人妻熟女乱又乱精品| 少妇愉情理伦片| 姚安县| 午夜性做爰电影| 临清市| 老熟女高潮喷了| 美女高潮无遮挡免费视频| 国产98在线 | 欧美| 国产性色av免费观看| 小罗莉极品一线天在线| 免费看国产zzzwww色| 一本久道久久综合狠狠爱| 少妇搡bbbb搡bbb搡野外| 欧美巨大巨粗黑人性aaaaaa| 性色av一二三天美传媒| 一边做一边喷17p亚洲乱妇50p| 秋霞在线观看秋| 宝贝胸罩脱了让我揉你的胸| jαpαnesehd熟女熟妇伦| 成全在线观看免费完整版下载| 亚洲一区二区三区 日韩| 国产在线永久视频| 疯狂做受xxxx高潮不断| 宜州市| 男人狂躁进女人下面免费视频| 欧美老妇与禽交| 上司部长出轨漂亮人妻| 天堂资源官网在线资源| 荡乳尤物h| 馆陶县| 国产粗话肉麻对白在线播放| 汶上县| 成全在线观看高清资源| 亚洲va天堂va在线va欧美| 97在线视频免费人妻| 我的漂亮老师2中文字幕版| 亚洲人成网站观看在线播放| 亚洲国产日韩欧美视频二区 |