国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄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){
                //創(chuàng)建一個煙花
                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);
            },
            //創(chuàng)造煙花
            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);
                },
                //創(chuàng)造煙花
                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」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
    原文鏈接:https://blog.csdn.net/qq_41383900/article/details/105026768
    
    


    日歷

    鏈接

    個人資料

    藍藍設計的小編 http://www.dzxscac.cn

    存檔

    主站蜘蛛池模板: 成人免费午夜无码视频| 国产精品成人一区二区网站软件| 人妻少妇被粗大爽.9797pw| 偷拍农村老熟妇xxxxx7视频| 怡红院男人的天堂| 在线视频精品| 国产 亚洲 制服 无码 中文| 台湾无码av一区二区三区| 免费看a毛片| 白丝乳交内射一二三区| 饥渴少妇高潮视频大全| 国产一区二区在线播放| 成人欧美在线观看| 欧洲码亚洲码的区别入口| 中文字幕亚洲日韩无线码| 奇米影视777第四色| 成 人影片 免费观看| 国产精品xxx在线| 无码人妻一区、二区、三区免费视频| 欧美手机在线视频| 4480yy亚洲午夜私人影院剧情 | 日韩一级欧美一级| 伊人狼人久久| 亚洲午夜爱爱香蕉片| 风韵犹存丰满大屁股熟妇视频| 奇米一区| 涩涩片影院| 俄罗斯老熟妇色xxxx| 日本精品videossex 黑人| 亚洲人成人| 日本欧美一级| 亚洲中文无码永久免费| 日本熟人妻中文字幕在线| 久久精品在线播放| 久久精品夜| 老司机午夜精品视频资源| 中国av在线播放| 成人av在线资源| 国产精品视频全国免费观看| 亚洲人成在线播放无码| 99久久精品一区二区成人|