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

教你用vue實現(xiàn)一個有趣的圍繞圓弧動畫效果

 更新時間:2022年04月24日 11:17:01   作者:海龜先生plus  
最近做的兩個項目都是關于vue的,做完整理一下,這篇文章主要給大家介紹了關于如何用vue實現(xiàn)一個有趣的圍繞圓弧動畫效果的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前幾天在好朋友樓上小黑的介紹下,看到了某個平臺的官網(wǎng),里面有一個人物介紹的模塊,里面的動畫感覺不錯,于是就自己動手寫了一個。

1.0 原官網(wǎng)示例

當然這里去掉了具體信息,原網(wǎng)站是里面圓圈中是人物的頭像,旁邊是介紹信息,每個人物就沿著圓弧移動到指定位置

2.0 我們實現(xiàn)的結果

當點擊中間開始時,幾個小球一次轉動到固定角度

3.0 簡單分析下

要讓小圓在圓弧上動,我們只需要知道圓心在圓弧上的坐標(x,y)就行了

所以當我們知道外圓的半徑,小圓的半徑,以及角度再利用三角函數(shù)就可以計算出 小圓在圓弧上定位的位置 top right

4.0 代碼實現(xiàn)

這里是將 移動的小圓封裝成一個組件 moveRound,只需要將 大圓半徑,小圓半徑轉動的角度,剩下的就可以按自己需要添加

<template>
  <div>
      <h3>圍繞圓弧移動動畫</h3>
      <div class="arc_bo" >
         <move-round :minR="25" :bigR="150" :angle="30" ref="mRound1" >	     </move-round>
          <span class="start" @click="toMove" >開始</span>
      </div>
  </div>
</template>

<script>
    import moveRound from './components/moveRound.vue'
    export default {
        name: 'arcMoveAni',
        components: {
            moveRound
        },
        methods: {
            toMove() {
                this.$refs.mRound1.toMove()
            }
        }
    }
</script>

<style scoped>
    .arc_bo{
        margin: 0 auto;
        width: 6rem;
        height: 6rem;
        border-radius: 50%;
        border: 1px solid #ccc;
        position: relative;
        margin-top: 2rem;
    }
    .start{
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%,-50%);
        color: #f40;
        width: 1rem;
        height: 1rem;
        border-radius: 50%;
        border: 1px solid #ccc;
        text-align: center;
        line-height: 1rem;
    }
</style>

moveRound組件, 角度的動態(tài)改變計算 top,right的值,其中 raf,cafrequestAnimationFrame的兼容處理,不明白的可以看往期文章或者百度。

<template>
  <div>
      <div class="round" :style="setPosition" ></div>
  </div>
</template>

<script>
    let timer = 0
    import { raf,caf } from '../../utils/raf'
    export default {
        name: 'moveRound',
        props: {
            angle: { // 需要轉動的角度
                type: Number,
                default: 0
            },
            bigR: { // 外層大圓半徑
                type: Number,
                default: 0
            },
            minR: { //移動小圓半徑
                type: Number,
                default: 0
            },
            backgroundColor: {
                type: String,
                default: '#7fffd4'
            }
        },
        data() {
            return {
                top: '',
                right: '',
                setAngle: 0
            }
        },
        mounted() {

        },
        computed: {
            /**
             * sin 對應 y 的值,轉換為定位中距離頂部top等于 圓的半徑 - y - 小圓半徑(讓圓心在圓弧上)
             * cos 對應 x 的值,轉換為定位中距離右邊right等于 圓的半徑 - x - 小圓半徑
             * **/ 
            setPosition( { top, right ,setAngle, bigR, minR, backgroundColor} ) {
                let size = minR*2 + 'px'

                let x = bigR * ( 1 - Math.cos(setAngle * Math.PI/180)) - minR
                let y = bigR * ( 1 - Math.sin(setAngle * Math.PI/180))  - minR

                right = x + 'px'
                top = y + 'px'
                return {
                    top,
                    right,
                    width: size,
                    height: size,
                    backgroundColor
                }
            }
        },
        methods: {
            toMove() {
            	// 調整 累加值,改變速度
                this.setAngle += 1
                timer = raf(this.toMove)
                // 結束動畫
                if(this.setAngle > this.angle) {
                    caf(timer)
                    // 也可以根據(jù)需要重復執(zhí)行
                    // this.setAngle = 0
                }
            }
        }
    }
</script>

<style>
 .round{
    position: absolute;
    will-change: top,right;
    border-radius: 50%;
 }
</style>

5.0 總結

主要的點就是根據(jù)角度計算位置,只要思路正確,應該可以少走彎路。

到此這篇關于用vue實現(xiàn)一個有趣的圍繞圓弧動畫效果的文章就介紹到這了,更多相關vue實現(xiàn)圓弧動畫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue 去除路徑中的#號

    Vue 去除路徑中的#號

    大家都知道vue-router有兩種模式,hash模式和history模式,帶#的則是hash模式。接下來給大家?guī)砹薞ue 去除路徑中的#號的解決方法,感興趣的朋友一起看看吧
    2018-04-04
  • vue實現(xiàn)一個6個輸入框的驗證碼輸入組件功能的實例代碼

    vue實現(xiàn)一個6個輸入框的驗證碼輸入組件功能的實例代碼

    這篇文章主要介紹了vue實現(xiàn)一個6個輸入框的驗證碼輸入組件功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • vue 解決form表單提交但不跳轉頁面的問題

    vue 解決form表單提交但不跳轉頁面的問題

    今天小編就為大家分享一篇vue 解決form表單提交但不跳轉頁面的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • Vue.js實現(xiàn)九宮格圖片展示模塊

    Vue.js實現(xiàn)九宮格圖片展示模塊

    這篇文章主要為大家詳細介紹了Vue.js實現(xiàn)九宮格圖片展示模塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vue props 一次傳多個值實例

    vue props 一次傳多個值實例

    這篇文章主要介紹了vue props 一次傳多個值實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue使用MD5對前后端進行加密的實現(xiàn)

    Vue使用MD5對前后端進行加密的實現(xiàn)

    前后端分離的項目,遇到了對密碼進行加密的情況,在前端或者是在后端加密都是可以的,本文主要介紹了Vue使用MD5對前后端進行加密的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • 深入探索Vue3.x中的七大高級用法

    深入探索Vue3.x中的七大高級用法

    Vue3.x 自發(fā)布以來,憑借其性能的顯著提升和更加靈活的組合式 API,已經(jīng)成為了現(xiàn)代前端開發(fā)的重要工具之一,除了基本用法外,Vue3.x 還提供了許多高級功能,本文將和大家一起深入探索Vue3.x中的七大高級用法,需要的朋友可以參考下
    2024-03-03
  • VUE 解決mode為history頁面為空白的問題

    VUE 解決mode為history頁面為空白的問題

    今天小編就為大家分享一篇VUE 解決mode為history頁面為空白的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 搭建vue3項目以及按需引入element-ui框架組件全過程

    搭建vue3項目以及按需引入element-ui框架組件全過程

    element是基于vue.js框架開發(fā)的快速搭建前端的UI框架,下面這篇文章主要給大家介紹了關于搭建vue3項目以及按需引入element-ui框架組件的相關資料,文中通過圖文以及代碼介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • vue3+ts+axios+pinia實現(xiàn)無感刷新方式

    vue3+ts+axios+pinia實現(xiàn)無感刷新方式

    這篇文章主要介紹了vue3+ts+axios+pinia實現(xiàn)無感刷新方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論

伊金霍洛旗| 南汇区| 杂多县| 渭源县| 平果县| 高尔夫| 施甸县| 安仁县| 卢氏县| 黎川县| 星子县| 长治县| 漳平市| 涪陵区| 张家港市| 迭部县| 德安县| 张家界市| 罗田县| 旬邑县| 磐安县| 台州市| 西林县| 沐川县| 增城市| 全南县| 朝阳市| 屯留县| 龙陵县| 金昌市| 抚顺市| 吐鲁番市| 枞阳县| 宜兰市| 吕梁市| 安平县| 镇巴县| 安仁县| 东乡| 清苑县| 潍坊市|