最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue圓環(huán)百分比進(jìn)度條組件功能的實(shí)現(xiàn)

 更新時(shí)間:2021年05月25日 14:39:16   作者:孩子他爹  
在一些頁面設(shè)置進(jìn)度條效果給人一種很好的體驗(yàn)效果,今天小編教大家vue圓環(huán)百分比進(jìn)度條組件功能的實(shí)現(xiàn)代碼,代碼超級(jí)簡單啊,感興趣的朋友快來看下吧

  有需要的人可以參考一下,如果試用過,發(fā)現(xiàn)問題,歡迎留言告知,不勝感激。

功能介紹:

1、若頁面無刷新,且第一次傳值小于第二次傳值或者圓環(huán)初始化時(shí)執(zhí)行的是遞增動(dòng)畫

2、若頁面無刷新,且第一次傳值大于第二次傳值則為執(zhí)行遞減動(dòng)畫

3、中間展示的百分比數(shù)字有緩動(dòng)動(dòng)畫(速度同圓環(huán)進(jìn)度動(dòng)畫一直)

4、動(dòng)畫完成時(shí)會(huì)觸發(fā)動(dòng)畫完成回調(diào)

5、外部傳值為圓環(huán)進(jìn)度百分比(整數(shù)),圓環(huán)動(dòng)畫速度(整數(shù))

效果如圖所示:

<template>
  <div class="percentloop">
    <div class="circle-left">
      <div ref="leftcontent"></div>
    </div>
    <div class="circle-right">
      <div ref="rightcontent"></div>
    </div>
    <div class="number">
      {{ percent }} %
    </div>
  </div>
</template>

<script>
export default {
  props: {
    percentNum: {
      type: [String, Number],
      default: 0
    },
    speed: { // 建議取值為0-3
      type: [String, Number],
      default: 1
    }
  },
  data () {
    return {
      percent: 0,
      initDeg: 0,
      timeId: null,
      animationing: false
    }
  },
  methods: {
    transformToDeg (percent) {
      let deg = 0
      if (percent >= 100) {
        deg = 360
      } else {
        deg = parseInt(360 * percent / 100)
      }
      return deg
    },
    transformToPercent (deg) {
      let percent = 0
      if (deg >= 360) {
        percent = 100
      } else {
        percent = parseInt(100 * deg / 360)
      }
      return percent
    },
    rotateLeft (deg) { // 大于180時(shí),執(zhí)行的動(dòng)畫
      this.$refs.leftcontent.style.transform = 'rotate(' + (deg - 180) + 'deg)'
    },
    rotateRight (deg) { // 小于180時(shí),執(zhí)行的動(dòng)畫
      this.$refs.rightcontent.style.transform = 'rotate(' + deg + 'deg)'
    },
    goRotate (deg) {
      this.animationing = true
      this.timeId = setInterval(() => {
        if (deg > this.initDeg) { // 遞增動(dòng)畫
          this.initDeg += Number(this.speed)
          if (this.initDeg >= 180) {
            this.rotateLeft(this.initDeg)
            this.rotateRight(180) // 為避免前后兩次傳入的百分比轉(zhuǎn)換為度數(shù)后的值不為步距的整數(shù),可能出現(xiàn)的左右轉(zhuǎn)動(dòng)不到位的情況。
          } else {
            this.rotateRight(this.initDeg)
          }
        } else { // 遞減動(dòng)畫
          this.initDeg -= Number(this.speed)
          if (this.initDeg >= 180) {
            this.rotateLeft(this.initDeg)
          } else {
            this.rotateLeft(180) // 為避免前后兩次傳入的百分比轉(zhuǎn)換為度數(shù)后的值不為步距的整數(shù),可能出現(xiàn)的左右轉(zhuǎn)動(dòng)不到位的情況。
            this.rotateRight(this.initDeg)
          }
        }
        this.percent = this.transformToPercent(this.initDeg) // 百分比數(shù)據(jù)滾動(dòng)動(dòng)畫
        const remainer = Number(deg) - this.initDeg
        if (Math.abs(remainer) < this.speed) {
          this.initDeg += remainer
          if (this.initDeg > 180) {
            this.rotateLeft(deg)
          } else {
            this.rotateRight(deg)
          }
          this.animationFinished()
        }
      }, 10)
    },
    animationFinished () {
      this.percent = this.percentNum // 百分比數(shù)據(jù)滾動(dòng)動(dòng)畫
      this.animationing = false
      clearInterval(this.timeId)
      this.$emit('animationFinished') // 動(dòng)畫完成的回調(diào)
    }
  },
  created () {
    this.goRotate(this.transformToDeg(this.percentNum))
  },
  watch: {
    'percentNum': function (val) {
      if (this.animationing) return
      this.goRotate(this.transformToDeg(val))
    }
  }
}
</script>

<style scoped lang="scss">
.percentloop {
  position: relative;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  overflow: hidden;
  .circle-left, .circle-right {
    position: absolute;
    top: 0;
    left: 0;
    width: 50%;
    height: 100%;
    background-color: red;
    overflow: hidden;
    &>div {
      width: 100%;
      height: 100%;
      background-color: #8a8a8a;
      transform-origin: right center;
      /*transition: all .5s linear;*/
    }
  }
  .circle-right {
    left: 50%;
    &>div {
      transform-origin: left center;
    }
  }
  .number {
    position: absolute;
    top: 9%;
    bottom: 9%;
    left: 9%;
    right: 9%;
    background-color: #fff;
    border-radius: 50%;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #000;
  }
}
</style>

以上就是vue圓環(huán)百分比進(jìn)度條組件功能的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于vue進(jìn)度條的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue slot插槽的使用詳情

    Vue slot插槽的使用詳情

    這篇文章主要介紹了Vue slot插槽的使用,在生活中很多地方都有插槽,電腦usb的插槽,插板當(dāng)中的電源插槽,插槽的目的是為了讓我們原來的設(shè)備具備更多的擴(kuò)展性比如電腦的USB我們可以插入U(xiǎn)盤,手機(jī),鼠標(biāo),鍵盤等等,下面文章就來介紹Vue slot插槽是如何使用的
    2021-10-10
  • vue之keepAlive使用案例詳解

    vue之keepAlive使用案例詳解

    這篇文章主要介紹了vue之keepAlive使用案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • swiper/vue 獲取 swiper實(shí)例方法詳解

    swiper/vue 獲取 swiper實(shí)例方法詳解

    在網(wǎng)上搜了一下如何調(diào)用swiper實(shí)例,大部分都是通過 swiperRef = new Swiper(‘.swiper’, options) 這種方法初始化swiper,然后直接能用 swiperRef 實(shí)例,這篇文章主要介紹了swiper/vue 獲取 swiper實(shí)例方法詳解,需要的朋友可以參考下
    2023-12-12
  • vue語法自動(dòng)轉(zhuǎn)typescript(解放雙手)

    vue語法自動(dòng)轉(zhuǎn)typescript(解放雙手)

    這篇文章主要介紹了vue語法自動(dòng)轉(zhuǎn)typescript,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • vue 文件目錄結(jié)構(gòu)詳解

    vue 文件目錄結(jié)構(gòu)詳解

    本篇文章主要介紹了vue 文件目錄結(jié)構(gòu)詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • vue3.0關(guān)閉eslint校驗(yàn)的3種方法詳解

    vue3.0關(guān)閉eslint校驗(yàn)的3種方法詳解

    這篇文章主要給大家介紹了關(guān)于vue3.0關(guān)閉eslint校驗(yàn)的3種方法,在實(shí)際開發(fā)過程中,eslint的作用不可估量,文中將關(guān)閉的方法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • vue3使用defineModel實(shí)現(xiàn)父子組件雙向綁定

    vue3使用defineModel實(shí)現(xiàn)父子組件雙向綁定

    這篇文章主要個(gè)給大家介紹了在vue3中使用defineModel進(jìn)行父子組件中的雙向綁定,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 使用idea創(chuàng)建vue項(xiàng)目的圖文教程

    使用idea創(chuàng)建vue項(xiàng)目的圖文教程

    Vue.js是一套構(gòu)建用戶界面的框架,只關(guān)注視圖層,它不僅易于上手,還便于與第三方庫或既有項(xiàng)目整合,下面這篇文章主要給大家介紹了關(guān)于使用idea創(chuàng)建vue項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • vue的index.html中獲取環(huán)境變量和業(yè)務(wù)判斷圖文詳解

    vue的index.html中獲取環(huán)境變量和業(yè)務(wù)判斷圖文詳解

    這篇文章主要給大家介紹了關(guān)于vue的index.html中獲取環(huán)境變量和業(yè)務(wù)判斷的相關(guān)資料,對(duì)vue來說index.html是一個(gè)總的入口文件,vue是單頁面應(yīng)用,掛在id為app的div下然后動(dòng)態(tài)渲染路由模板,需要的朋友可以參考下
    2023-09-09
  • 前端架構(gòu)vue動(dòng)態(tài)組件使用基礎(chǔ)教程

    前端架構(gòu)vue動(dòng)態(tài)組件使用基礎(chǔ)教程

    這篇文章主要為大家介紹了前端架構(gòu)vue動(dòng)態(tài)組件使用的基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-02-02

最新評(píng)論

庄河市| 新密市| 乌兰浩特市| 筠连县| 郁南县| 兰坪| 虞城县| 灵石县| 肇源县| 咸宁市| 左贡县| 综艺| 民乐县| 花莲县| 牙克石市| 洪湖市| 赣州市| 土默特左旗| 双城市| 称多县| 凯里市| 宣恩县| 阳信县| 汽车| 安龙县| 邓州市| 响水县| 托克托县| 家居| 五华县| 锡林浩特市| 大城县| 淮阳县| 宜君县| 农安县| 花垣县| 满城县| 鄢陵县| 钟山县| 吉木萨尔县| 深水埗区|