国产69囗曝吞精在线视频,肥臀浪妇太爽了快点再快点,亚洲欧洲成人a∨在线观看,狠狠色丁香久久综合 ,国精一二二产品无人区免费应用,亚洲精品久久久久中文字幕,四虎一区二区成人免费影院网址 ,无码三级中文字幕在线观看

      教你用面向對象編程寫一個煙花爆炸的

      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.izc.net.cn

      存檔

      主站蜘蛛池模板: 久久日av| 99精品国产成人一区二区| 黑白配高清国语在线观看| 精品免费久久久| 中文字幕日韩av| 青青草视频偷拍| 美女粉嫩饱满的一线天mp4| 亚洲精品乱码久久久久久久久久久久| 人妻少妇精品久久| 激情综合婷婷丁香五月蜜桃| 欧美精品xxx| 99热91| 国产精品久久久久久久妇| 久久妇女高潮喷水多长时间| 日韩欧美一级视频| 亚洲精品~无码抽插| 成年免费视频播放网站推荐| 精品午夜福利视频| 日韩久久成人| 亚洲欧美日韩中文无线码| 91丝袜一区在线观看| 深夜视频在线播放| 被c到高潮疯狂喷水国产| 黑人狠狠的挺身进入| 日本高清视频www| 久久社区视频| 日韩欧美群交p片內射中文| 亚洲欧洲中文日韩乱码av| 激情五月婷婷网| 欧美色欧美亚洲高清在线观看| 伊人久久亚洲精品一区| 国产美女自拍视频| 麻豆91茄子在线观看| 国产精品亚韩精品无码a在线| 日本人又黄又爽又色的视频| 韩日欧美| 青青色在线视频| 无码熟妇人妻av| 亚洲精品国产av现线| 日韩电影三级| 一日本道伊人久久综合影|