欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于 Vue 實(shí)現(xiàn)一個(gè)酷炫的 menu插件

 更新時(shí)間:2017年11月14日 09:36:01   投稿:mrr  
本文給大家介紹基于 Vue 實(shí)現(xiàn)一個(gè)酷炫的 menu插件,此篇教程需要大家具備一定的css和vue基礎(chǔ)知識(shí),本文分步驟給大家介紹的非常詳細(xì),需要的朋友參考下吧

寫在前面

最近看到一個(gè)非常酷炫的menu插件,一直想把它鼓搗成vue形式,誰(shuí)讓我是vue的死灰粉呢,如果這都不算愛(ài):pensive:。:laughing:開(kāi)個(gè)小玩耍,我們一起來(lái)探索黑魔法吧。觀看本教程的讀者需要具備一定的vue和css3的知識(shí).

本文結(jié)構(gòu)

1.效果演示

2.使用方法介紹

3.關(guān)鍵步驟講解

正文

1.效果演示

pic_1

pic2

pic_3

在線演示 live demo

2.使用介紹

項(xiàng)目地址:github.com/MingSeng-W/vue-bloom-menu ,clone項(xiàng)目到本地

a. 首先在單文件組件里引入menu組件,導(dǎo)入common文件夾stylus里的menuConfig.stylus.

b.配置相應(yīng)的參數(shù)

可選參數(shù)

* radius:default為100px,item距離menu的button的距離。

* startAngle:defaut為0,item開(kāi)始的角度,以時(shí)鐘3點(diǎn)鐘方向記為0,然后順時(shí)針?lè)较驗(yàn)檫f增方向。

* endAngle:default為315,最后一個(gè)item的角度。

* itemNum:default為8

* animationDuration:default為0.5s,每個(gè)item動(dòng)畫的執(zhí)行時(shí)間

* itemAnimationDelay:default為0.04s,每個(gè)item之間animation觸發(fā)的間隔延遲時(shí)間

必選參數(shù)

* iconImgArr

import您需要的icon,然后生成iconImgArr(computed屬性綁定),作為props傳給menu組件

menu的位置

目前有center,corner兩種位置,在menu的class里指定。center的class:.menu-center-wrapper

corner的class:.menu-left-corner-wrapper。當(dāng)然自己指定位置也是ok的。

一個(gè)簡(jiǎn)單的example

 

demo

3.關(guān)鍵步驟講解

整個(gè)menu的實(shí)現(xiàn)關(guān)鍵在于計(jì)算menu展開(kāi)后最后的坐標(biāo),以及展開(kāi)與收縮的動(dòng)畫.(由于整個(gè)項(xiàng)目布局比較簡(jiǎn)單,所以這里主要講解邏輯和動(dòng)畫的實(shí)現(xiàn))

第一步:計(jì)算menu展開(kāi)后橫坐標(biāo)和縱坐標(biāo)

下面的x,y分別表示item在頁(yè)面的位置,以x為例。

x:原始的位置,x2最后展開(kāi)的位置,x1中間的過(guò)渡位置(主要是造成一個(gè)“拉回”的效果),以下是圖片解釋,為了解釋簡(jiǎn)單明了,我放大了radius倍數(shù)以及增加了動(dòng)畫的執(zhí)行時(shí)間。

位置解釋

位置的計(jì)算:首先計(jì)算每個(gè)item之間的夾角,起始item是沿著順時(shí)針布局的,每個(gè)item之間的夾角等于(endAngle-startAngle)/(itemNum-1)。當(dāng)前item應(yīng)該旋轉(zhuǎn)的角度為:angleCur=startAngle+index*每個(gè)item之間的夾角。得到item的旋轉(zhuǎn)角度之后,用Math.cos和Math.sin和radius相乘得到其橫坐標(biāo)和縱坐標(biāo).

關(guān)鍵代碼:

計(jì)算每個(gè)item的夾角

位置解釋

第二步,根據(jù)生成的坐標(biāo)使用js動(dòng)態(tài)生成animtion,并插入到樣式文件中。

生成展開(kāi)和收縮的keyframe

到這一步我們完成了點(diǎn)擊menu展開(kāi)與收縮。

第二步,完成點(diǎn)擊item之后item放大與消失,其他的item縮小與消失

item消失的keyframe

item消失的keyframe

這里觸發(fā)動(dòng)畫使用 vue提供transition ,當(dāng)元素的v-show為false時(shí),也就是display為none時(shí),觸發(fā)動(dòng)畫。

每個(gè)item動(dòng)畫完成后都會(huì)觸發(fā)animationEnd事件,監(jiān)聽(tīng)item的animationEnd事件,當(dāng)所有動(dòng)畫依次觸發(fā)完畢之后,提醒menu置于關(guān)閉狀態(tài)( 父子組件通信 )。

我在menu組件里使用v-on監(jiān)聽(tīng)animationEnd事件,item自己的動(dòng)畫執(zhí)行后,通過(guò)$emit觸發(fā)animationEnd事件,通知menu的動(dòng)畫計(jì)數(shù)count++,當(dāng)count達(dá)到總的項(xiàng)目數(shù)的時(shí)候,menu進(jìn)行關(guān)閉.

code

code

再次打開(kāi)menu的時(shí)候檢查與item綁定的showItem是否為false,是的話置為true。點(diǎn)擊時(shí)需要拿到被點(diǎn)擊item的index,得到全局的currentIndex即被點(diǎn)擊的item的index。被點(diǎn)中的使用放大動(dòng)畫,否則使用縮小動(dòng)畫。

pic_6

關(guān)鍵代碼

至此所有步驟講解完畢

總結(jié)

以上所述是小編給大家介紹的基于 Vue 實(shí)現(xiàn)一個(gè)酷炫的 menu插件,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 安裝node.js以及搭建vue項(xiàng)目過(guò)程中遇到的問(wèn)題詳解

    安裝node.js以及搭建vue項(xiàng)目過(guò)程中遇到的問(wèn)題詳解

    為了讓一些不太清楚搭建前端項(xiàng)目的小白,更快上手,下面這篇文章主要給大家介紹了關(guān)于安裝node.js以及搭建vue項(xiàng)目過(guò)程中遇到問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Vue實(shí)現(xiàn)登錄功能全套超詳細(xì)講解(含封裝axios)

    Vue實(shí)現(xiàn)登錄功能全套超詳細(xì)講解(含封裝axios)

    這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)登錄功能(含封裝axios)的相關(guān)資料,Vue是現(xiàn)在前端最流行的框架之一,作為前端開(kāi)發(fā)人員應(yīng)該要熟練的掌握它,需要的朋友可以參考下
    2023-10-10
  • vue js格式化數(shù)字為金額格式代碼

    vue js格式化數(shù)字為金額格式代碼

    這篇文章主要介紹了vue js格式化數(shù)字為金額格式代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue的h5日歷組件實(shí)現(xiàn)詳解

    vue的h5日歷組件實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了vue的h5日歷組件使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Vue結(jié)合高德地圖實(shí)現(xiàn)HTML寫自定義信息彈窗全過(guò)程

    Vue結(jié)合高德地圖實(shí)現(xiàn)HTML寫自定義信息彈窗全過(guò)程

    最近開(kāi)發(fā)中遇到一個(gè)多個(gè)點(diǎn)繪制,并實(shí)現(xiàn)點(diǎn)擊事件,出現(xiàn)自定義窗口顯示相關(guān)信息等功能,下面這篇文章主要給大家介紹了關(guān)于Vue結(jié)合高德地圖實(shí)現(xiàn)HTML寫自定義信息彈窗的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • vue-seamless-scroll 實(shí)現(xiàn)簡(jiǎn)單自動(dòng)無(wú)縫滾動(dòng)且添加對(duì)應(yīng)點(diǎn)擊事件的簡(jiǎn)單整理

    vue-seamless-scroll 實(shí)現(xiàn)簡(jiǎn)單自動(dòng)無(wú)縫滾動(dòng)且添加對(duì)應(yīng)點(diǎn)擊事件的簡(jiǎn)單整理

    vue-seamless-scroll是一個(gè)基于Vue.js的簡(jiǎn)單無(wú)縫滾動(dòng)組件, 基于requestAnimationFrame實(shí)現(xiàn),配置多滿足多樣需求,目前支持上下左右無(wú)縫滾動(dòng),單步滾動(dòng),及支持水平方向的手動(dòng)切換功能,本節(jié)介紹,vue添加 vue-seamless-scroll實(shí)現(xiàn)自動(dòng)無(wú)縫滾動(dòng)的效果,并對(duì)應(yīng)添加點(diǎn)擊事件
    2023-01-01
  • axios前端訪問(wèn)后端攜帶cookie的代碼實(shí)例

    axios前端訪問(wèn)后端攜帶cookie的代碼實(shí)例

    當(dāng)用戶在網(wǎng)站登錄后,服務(wù)器會(huì)在其瀏覽器上設(shè)置一個(gè)包含登錄信息的Cookie,通過(guò)這個(gè)Cookie,服務(wù)器能夠識(shí)別用戶是否已登錄,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • vue-router跳轉(zhuǎn)時(shí)打開(kāi)新頁(yè)面的兩種方法

    vue-router跳轉(zhuǎn)時(shí)打開(kāi)新頁(yè)面的兩種方法

    這篇文章主要給大家介紹了關(guān)于vue-router跳轉(zhuǎn)時(shí)打開(kāi)新頁(yè)面的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue-router具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Vue中動(dòng)態(tài)添加ref的方法詳解

    Vue中動(dòng)態(tài)添加ref的方法詳解

    在Vue.js項(xiàng)目中,ref是一個(gè)非常有用的功能,它可以用來(lái)獲取DOM元素或子組件的實(shí)例引用,通過(guò)ref,我們可以在父組件中直接操作子組件的方法和屬性,或者對(duì)DOM元素進(jìn)行直接操作,本文將詳細(xì)介紹如何在Vue中動(dòng)態(tài)添加ref,并通過(guò)多個(gè)具體的代碼示例來(lái)幫助讀者理解其實(shí)現(xiàn)過(guò)程
    2024-10-10
  • vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)思路詳解

    vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)思路詳解

    這篇文章主要給大家介紹了關(guān)于vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)思路的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02

最新評(píng)論