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

    存檔

    主站蜘蛛池模板: 少妇脱了内裤让我添| 呦呦精品| 无码中文av有码中文a| 伊人精品无码一区二区三区电影| 精品少妇av| 国产清纯白嫩初高中在线观看性色| 超薄丝袜足j好爽在线| 超碰97人人做人人爱综合| 极品久久久| 国产精品美女久久久久久麻豆| 亚洲裸男自慰gv网站| 9.1在线观看免费| 蜜臀av性久久久久蜜臀aⅴ麻豆| 少妇特黄a片一区二区三区| 国产亚洲精品久久综合阿香| 国产免费a| 毛片av免费看| 天天摸天天做天天爽| 娇妻在交换中哭喊着高潮| 国内自拍xxxx18| 久久精品亚洲精品| 无遮挡边吃摸边吃奶边做| 亚洲小说乱欧美另类| 亚洲欧洲自拍偷拍| 韩国bj大尺度vip福利网站| 99riav国产精品视频| 亚洲综合中文字幕无线码| 成人一区在线观看| 在线观看亚洲成人| 国产在线拍偷自揄拍无码| 精品国产久九九| 蜜臀av一区| 国产网站在线免费观看| 野外做受又硬又粗又大视频√| 欧美亚洲国产片在线播放| 日韩a在线| 日韩大片免费观看| 人妻少妇av无码一区二区| 亚洲最大成人av在线天堂网| 久久久久久久久久久久久久久久久久久久 | 久久久电影|