国产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://m.izc.net.cn

      存檔

      主站蜘蛛池模板: 日韩在线影视| 国产成人欧美亚洲日韩电影 | 精品国产肉丝袜久久首页| 免费在线成人| 国产老妇伦国产熟女老妇视频| 国产精品嫩草影院永久…| 欧美激情婷婷| 欧美成人片在线观看| 久久大香伊蕉在人线观看热| 精品播放| 国产精品人妻在线观看| 国产精品国语对白露脸在线播放| 播色屋| 国产热热| 国产成人麻豆精品午夜福利在线| 老司机在线精品视频播放| 成人小视频在线免费观看| 18禁无遮挡免费视频网站| 老熟女五十路乱子交尾中出一区 | 超碰97国产精品人人cao| 极品少妇被啪到呻吟喷水| 永久免费的av片在线电影网| 男人av的天堂| 免费无码黄网站在线观看| 在线视频精品免费观看10| 伊人精品视频| 成人手机av| 久久久精品人妻一区二区三区四| 国产麻豆精品传媒av国产婷婷| 欧美网站在线观看| 亚洲夜夜爱| 天天躁夜夜躁狠狠是什么心态| 女人和拘做受全程看视频| 日本xxxxwww| 亚洲一级影院| 亚洲 欧洲 无码 在线观看| 免费观看又色又爽又黄的| 中文字幕va| 另类 专区 欧美 制服丝袜| 日本高清一二三不卡区| 国产suv精品一区二区6|