国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Vue+CSS3實(shí)現(xiàn)轉(zhuǎn)盤抽獎

mj / 3035人閱讀

摘要:最近有個轉(zhuǎn)盤抽獎的需求,搜了一下現(xiàn)有的輪子,有的是用的動畫函數(shù)實(shí)現(xiàn)的,有的是用繪圖然后再用高頻率的調(diào)用旋轉(zhuǎn)方法,前者太老了沒法簡單移植到項(xiàng)目,后者感覺性能表現(xiàn)可能不會太好。核心思路是用以及實(shí)現(xiàn)旋轉(zhuǎn)動畫,使用和繪制出定位較為精確的輪盤獎項(xiàng)。

最近有個轉(zhuǎn)盤抽獎的需求,搜了一下現(xiàn)有的輪子,有的是用jQuery的動畫函數(shù)實(shí)現(xiàn)的,有的是用canvas繪圖然后再用高頻率的setTimeout調(diào)用旋轉(zhuǎn)方法,前者太老了沒法簡單移植到vue項(xiàng)目,后者感覺性能表現(xiàn)可能不會太好。也有一些用CSS動畫的方案,設(shè)計(jì)了加速-勻速-減速三個動畫,再計(jì)算偏轉(zhuǎn)角度讓三個動畫盡可能無縫銜接,但我感覺繞了大遠(yuǎn)路,應(yīng)該有更簡單輕量的實(shí)現(xiàn)方案。個人更傾向于用transition來實(shí)現(xiàn),不過網(wǎng)上的例子感覺還不夠好,有的傾斜文字都沒有對齊,最后還是自己手寫了一個。
無需jQuery,不用js腳本實(shí)現(xiàn)動畫細(xì)節(jié),動畫效果完全連續(xù)無需銜接,支持動態(tài)設(shè)置2個以上任意數(shù)量的獎項(xiàng)。
核心思路是用transition以及rotate實(shí)現(xiàn)旋轉(zhuǎn)動畫,使用transition-origin和rotate繪制出定位較為精確的輪盤獎項(xiàng)。

代碼及實(shí)例展示



  Prize number: {{ prizeNumber }}
  
  
   
Start
{{ item.name }}
html {
   background: #DD7C7D;
}

.wheel-wrapper {
    width: 300px;
    height: 300px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }

  .wheel-pointer {
    width: 60px;
    height: 60px;
    border-radius: 1000px;
    background: yellow;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    text-align: center;
    line-height: 60px;
    z-index: 10;
  }
  .wheel-bg {
    width: 100%;
    height: 100%;
    border-radius: 1000px;
    overflow: hidden;
    transition: transform 4s ease-in-out;
    background: #7EEF97;
    
    &.freeze {
      transition: none;
      background: red;
    }
  }

  .prize-list {
    width: 100%;
    height: 100%;
    position: relative;
    text-align: center;
  }

  .prize-item-wrapper {
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 150px;
    height: 150px;
  }

  .prize-item {
    width: 100%;
    height: 100%;
    transform-origin: bottom;

    .prize-name {
      padding: 16px 0;
    }

    .prize-icon {}
  }
var Main = {
  data() {
    return {
      freeze: false,
      rolling: false,
      wheelDeg: 0,
      prizeNumber: 8,
      prizeListOrigin: [
        {
          icon: "https://picsum.photos/40?random=1",
          name: "$10000"
        },
        {
          icon: "https://picsum.photos/40?random=6",
          name: "Thank you!"
        },
                {
          icon: "https://picsum.photos/40?random=2",
          name: "$500"
        },
        {
          icon: "https://picsum.photos/40?random=3",
          name: "$100"
        },
                {
          icon: "https://picsum.photos/40?random=6",
          name: "Thank you!"
        },
        {
          icon: "https://picsum.photos/40?random=4",
          name: "$50"
        },
        {
          icon: "https://picsum.photos/40?random=5",
          name: "$10"
        },
        {
          icon: "https://picsum.photos/40?random=6",
          name: "Thank you!"
        }
      ]
    };
  },
  computed: {
    prizeList () {
      return this.prizeListOrigin.slice(0, this.prizeNumber)
    }
  },
  methods: {
    onClickRotate() {
      if (this.rolling) {
        return;
      }
      this.rolling = true;
      const { wheelDeg, prizeList } = this;
      const random = Math.floor(Math.random() * (prizeList.length ));
      console.log(random);
      this.wheelDeg =
        wheelDeg -
        wheelDeg % 360 +
        6 * 360 +
        (360 - 360 / prizeList.length * random);
      setTimeout(() => {
        this.rolling = false;
        alert("Result:" + prizeList[random].name);
      }, 4500);
    }
  },
  watch: {
    prizeNumber () {
      this.freeze = true
      this.wheelDeg = 0
     
      setTimeout(() => {
         this.freeze = false
      }, 0)
    }
  }
};
var App = Vue.extend(Main);
new App().$mount("#app");

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/114882.html

相關(guān)文章

  • 轉(zhuǎn)盤抽獎腳本自己擼

    摘要:效果需求很多場景都需要做各種活動,抽獎最是司空見慣了,跑馬燈的,轉(zhuǎn)盤的,下面先花幾分鐘擼出一個轉(zhuǎn)盤的吧,當(dāng)然網(wǎng)上至少有一打的可供參考。但是我們只差一個定時器循環(huán)了接下里實(shí)現(xiàn)這個主循環(huán),不斷更新值就可以了。 demo 效果 需求 很多場景都需要做各種活動,抽獎最是司空見慣了,跑馬燈的,轉(zhuǎn)盤的,下面先花幾分鐘擼出一個轉(zhuǎn)盤的吧,當(dāng)然網(wǎng)上至少有一打的 demo 可供參考。真的只需要一點(diǎn)點(diǎn)時間而...

    趙春朋 評論0 收藏0
  • 轉(zhuǎn)盤抽獎-- 自己手?jǐn)]

    摘要:自己很菜,不可否認(rèn)。所以上周日試試水,看看自己能否寫個圓盤抽獎的。效果圖代碼外部圓內(nèi)部園請輸入外數(shù)字開始基礎(chǔ)旋轉(zhuǎn)的圓以自己的寬度的一半為,以父盒子的高度一半為,作為旋轉(zhuǎn)點(diǎn)。 自己很菜,不可否認(rèn)。所以上周日試試水,看看自己能否寫個圓盤抽獎的demo。// github L6zt開發(fā)思路 布局 css rotate 布局; 抽獎過渡效果,采用css3 transition; 動態(tài)計(jì)算抽獎...

    gaara 評論0 收藏0
  • canvas之轉(zhuǎn)盤抽獎

    摘要:最近工作中重構(gòu)了抽獎轉(zhuǎn)盤,給大家提供一個開發(fā)轉(zhuǎn)盤抽獎的思路需求轉(zhuǎn)盤根據(jù)獎品數(shù)量不同而有變化目錄結(jié)構(gòu)由于業(yè)務(wù)需要所以開發(fā)了兩個版本抽獎,和,不過部分只能替換圖片,沒有功能邏輯。 最近工作中重構(gòu)了抽獎轉(zhuǎn)盤,給大家提供一個開發(fā)轉(zhuǎn)盤抽獎的思路 需求 1、轉(zhuǎn)盤根據(jù)獎品數(shù)量不同而有變化 2、canvas 目錄結(jié)構(gòu) showImg(https://segmentfault.com/img/bVbwL...

    _ang 評論0 收藏0

發(fā)表評論

0條評論

mj

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<