国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄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://www.dzxscac.cn

            存檔

            主站蜘蛛池模板: 深夜国产一区二区三区在线看| 国产偷窥熟妇高潮呻吟| 亚洲伊人久久成人综合网 | 国产乱人伦偷精品视频不卡| 精品国产欧美一区二区三区成人| 久久亚洲精品情侣| 国产女人抽搐喷浆视频| jizzjizz国产| 中文字幕777| 国产在线一区二区三区av| 97超碰国产在线| 国产a三级久久精品| 2020亚洲国产精品久久久| 亚洲人xxx| 成人网站免费看黄a站视频| 国产香蕉尹人在线视频你看看| 日韩色道| 国产精品视频午夜福利| 亚洲国产熟妇在线视频| 激情中文字幕| 色av免费| 无码免费一区二区三区| 2020国产欧洲精品网站| 国产五区| 国产精品第一页一区二区| 国产 中文 制服丝袜 另类| 羞辱狗奴的句子有哪些| 伊人青青操| 麻豆成人精品国产免费| 国产av中文av无码av狼人| 三级特黄| 欧美 另类 交| 精品熟女碰碰人人a久久| 亚洲 综合 校园 欧美 制服| 成人av一区二区三区在线观看| 免费男人和女人牲交视频全黄 | 在线观视频免费观看| 国产av一区二区三区传媒| 人妻熟女一区二区aⅴ| 高潮毛片| av手机观看|