• <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <small id="ggggg"></small> <sup id="ggggg"></sup>
    <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <tfoot id="ggggg"></tfoot>
  • <nav id="ggggg"><cite id="ggggg"></cite></nav>
    <nav id="ggggg"></nav>
    成人黃色A片免费看三更小说,精品人妻av区波多野结衣,亚洲第一极品精品无码,欧美综合区自拍亚洲综合,久久99青青精品免费观看,中文字幕在线中字日韩 ,亚洲国产精品18久久久久久,黄色在线免费观看

    教你用面向?qū)ο缶幊虒懸粋€煙花爆炸的

    2020-3-23    前端達(dá)人

    點擊查看原圖



    想要學(xué)會這個漂亮的煙花嗎?快來跟著學(xué)習(xí)吧~

    結(jié)構(gòu)

    <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>
    



    行為

    編寫構(gòu)造函數(shù)Firework

    需要用到一個鼠標(biāo)點擊的位置,一個div選擇器,一個爆炸樣式

     function Firework(x,y,selector,type){
            //此處獲取對象的方式為單例的思想,避免重復(fù)獲取相同的元素
            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為鼠標(biāo)落點
                this.x = x ;
                this.y = y;
                //maxXy為最大運動范圍
                this.maxX = this.box.offsetWidth - this.ele.offsetWidth;
                this.maxY = this.box.offsetHeight - this.ele.offsetHeight;
                //初始化結(jié)束后  煙花隨機(jī)顏色
                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 
                }
            },
            //隨機(jī)顏色
            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>
    

    ————————————————
    版權(quán)聲明:本文為CSDN博主「SpongeBooob」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
    原文鏈接:https://blog.csdn.net/qq_41383900/article/details/105026768
    
    


    日歷

    鏈接

    個人資料

    存檔

    主站蜘蛛池模板: 亚洲精品视频免费观看| 久久99热这里只有精品8| 伊人一伊人色综合网| 国产精品无码Av在线播放小说| 亚洲国产成人久久一区WWW| 久久久久女教师免费一区| 成人无码特黄特黄AV片在线 | 一级毛片免费播放视频| 亚洲H成年动漫在线观看不卡| 国产精品国产AV片国产| 狠狠色综合播放一区二区| 国产欧美精品区一区二区三区| 久久久2019精品视频中文字幕| 日本亚洲成a人片在线观看| 东乡族自治县| 一本大道久久精品 东京热| 视频一区视频二区国产| 日本熟妇厨房bbw| 老肥熟女老女人野外免费区| 欧美性色xo影院在线播放| 成人午夜福利视频| 欧美 日韩 国产 成人 在线观看 | 色综合欧美在线视频区| 国产精品视频免费网站| A片在线不卡观看免费观看| 热久久这里超碰精品| 中文字幕日本一区二区在线观看| 717午夜伦伦电影理论片 | 通河县| 亚洲av口爆深喉高清| 精品国精品国产自在久国产应用| 在线观看1024精品国产| 国产av毛片精品一区二区三区| 淫逼网| 四虎在线中文字幕一区| 综合色色网| 国产综合91天堂亚洲国产| 少妇极品熟妇人妻无码| H工口全彩里番库18禁无遮挡| 成人免费无码大片A毛片软件| 欧美日韩亚洲国产无线码|