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

    存檔

    主站蜘蛛池模板: 中文字幕第23页| 韩国乱码伦视频免费| 国产精品1024| 91九色国产视频| 久久男人av资源站| 72种姿势欧美久久久久大黄蕉| 男人把女人捅爽| 色综合久久久久综合体桃花网 | 狠狠干欧美| 亚洲欧洲日韩国内精品| av无码午夜福利一区二区三区| 一区二区三区在线| 精品国产午夜福利在线观看 | 亚洲字幕| 亚洲插| 日韩人妻不卡一区二区三区| а√天堂www在线а√天堂视频 | 欧美xxxx做受欧美1314| 亚洲欧洲日产国码无码av一| 中文字幕一区二区三区人妻四季| 国产精品一码二码三码| 免费人成在线观看vr网站| 国产精品国产自产拍高清av| 国产精品麻豆成人av电影艾秋| 一区二区和激情视频| 国产精品久久人妻互换毛片| 欧美日本一区| 探花国产精品一区二区| 国产韩国精品一区二区三区久久 | caoporn人人| 国产xxx69麻豆国语对白| 国产午夜鲁丝片av无码免费| 久久精品国产免费| 欧美福利视频一区二区 | 欧美裸体xxxx极品少妇| 午夜影院在线看| 熟妇高潮精品一区二区三区| 风韵丰满熟妇啪啪区老老熟女百度| 国产靠逼视频| 99国产精品免费| 亚洲综合激情五月丁香六月|