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

通過GASP讓vue實現(xiàn)動態(tài)效果實例代碼詳解

 更新時間:2019年11月24日 11:42:15   作者:icepy  
GASP是一個JavaScript動畫庫,它支持快速開發(fā)高性能的 Web 動畫。GASP 使我們能夠輕松輕松快速的將動畫串在一起,來創(chuàng)造一個高內(nèi)聚的流暢動畫序列。這篇文章主要介紹了通過GASP讓vue實現(xiàn)動態(tài)效果,需要的朋友可以參考下

單頁應(yīng)用及支持它們的前端框架提供了一個很好的機會,可以為程序設(shè)計提供令人驚嘆的交互層,本文,我們將了解 vue.js 及如何集成 GASP 動畫庫來添加令人驚嘆的動畫效果。

Vue.js 是一個功能強大且易掌握的 JS 框架,在 Vue CLI 的幫助下,我們能夠快速構(gòu)建具有所有最新 Webpack 功能的應(yīng)用程序,而無需花費時間來配置 webpack,只需安裝 Vue CLI,在重大上輸入:create <project-name>,您就可以發(fā)車了。

GASP是一個JavaScript動畫庫,它支持快速開發(fā)高性能的 Web 動畫。GASP 使我們能夠輕松輕松快速的將動畫串在一起,來創(chuàng)造一個高內(nèi)聚的流暢動畫序列。

在構(gòu)建新的 Daily Fire 主頁時,我為了演示產(chǎn)品如何工作而使用了大量動畫,但是通過 GASP的方式(不是 GIF 或視頻),我可以為動畫添加交互層使它們更具吸引力。如你所見,將 GASP 與 vue相結(jié)合是簡單且強大的,

讓我們看看如何使用 GASP 與 VUE 實現(xiàn)簡單的時間軸,我們將在本文使用 .vue 文件,這些文件由 webpack 的 vue-loader加載使用,通過Vue CLI創(chuàng)建的項目將會自動

基礎(chǔ)

讓我們先編寫一些標記,以便了解我們將制作的動畫

<template>
 <div ref="box" class="box"></div>
</template>
<style>
.box {
 height: 60px;
 width: 60px;
 background: red;
}
</style>

我們將一個紅色 box 繪制到DOM中,注意 div 標簽上的ref 標記,當我們在引入GASP 后通過該屬性可以引用該元素。VUE 通過組件的$refs屬性使通過 ref 標記的元素可以使用。

現(xiàn)在引入 GASP

<template>
 <div ref="box" class="box"></div>
</template>
<script>
import { TimelineLite } from 'gsap'
export default {
 mounted() {
  const { box } = this.$refs
  const timeline = new TimelineLite()
  timeline.to(box, 1, { x: 200, rotation: 90 })
 }
}
</script>
<style>
/* styles emitted */
</style>

首先,我們從 GASP 中引入TimelineLite,然后,當組件掛載后,我們通過$refs獲取到對 box 元素的引用。然后我們初始化 GASP 的時間線實例來播放動畫。

Timeline 實例暴露出一個to方法,我們傳遞三個參數(shù)給該方法:

  • 參數(shù)1:要設(shè)置動畫效果的元素
  • 參數(shù)2:動畫運行的秒數(shù)
  • 參數(shù)3:描述動畫行為的對象

下面鏈接展示了一小段代碼展示的運行效果:

https://codepen.io/smlparry/pen/rZdbEw

很簡單,有木有!接下來讓我們用 GASP 的 EasePack 賦予這個小動畫更多的生命。使用 ease緩動特效是一種簡單的方案,它將使你的動畫特效不再那么僵硬,更加友好。當然,如果你沒有將你的動畫放進隊列中,你將不能充分利用好 GASP 的時間線,讓我們在動畫的運行中途將其由紅框過渡為綠框。

<template>
 <div ref="box" class="box"></div>
</template>
<script>
import { TimelineLite, Back } from 'gsap'
export default {
 mounted() {
  const { box } = this.$refs
  const timeline = new TimelineLite()
  timeline.to(box, 1, {
   x: 200,
   rotation: 90,
   ease: Back.easeInOut, // Specify an ease
  })
  timeline.to(box, 0.5, {
   background: 'green'
  },
  '-=0.5' // Run the animation 0.5s early
  )
 }
}
</script>
<style>
/* styles emitted */
</style>

注意第21行的額外參數(shù),在上面的代碼中它將告訴 GASP 運行一個相對于前一個動畫的動畫,使用+=指定完成后的時間,使用-= 指定完成前的時間。

結(jié)果在鏈接中:https://codepen.io/smlparry/pen/mGxYWN

有了這個簡單的改動,我們的動畫更加生動了!

通過這些原則的基礎(chǔ)了解,我們可以開始構(gòu)建更復雜、更吸引人的動畫。正如我們將在下一個例子中所看到的。

在基礎(chǔ)上更進一步

讓我們創(chuàng)建一個動畫(該動畫曾在Daily Fire首頁中使用 ),這個友好的小泡泡:

讓我們從標簽標記開始:

<template>
<div class="bubble-wrapper">
 <div ref="bubble" class="bubble">
  <img class="bubble-image"
     src="./assets/img/slack-white.svg" />
 </div>
 <div ref="bubblePulse" class="bubble-pulse"></div>
</div>
</template>
<style>
.bubble-wrapper {
 position: relative;
}
.bubble {
 position: relative;
 z-index: 2;
 display: flex;
 align-items: center;
 justify-content: center;
 border: 1px solid white;
 background: #272727;
 border-radius: 50%;
 height: 100px;
 width: 100px;
}
.bubble-pulse {
 position: absolute;
 z-index: 1;
 height: 120px;
 width: 120px;
 top: 50%;
 left: 50%;
 margin-top: -60px;
 margin-left: -60px;
 background: #272727;
 border-radius: 50%;
 opacity: 0;
 transform: scale(0);
}
.bubble-image {
 height: 50%;
}
</style>

我們現(xiàn)在有這個一個元素


讓我們賦予它一些生命:

<template>
<!-- HTML emitted -->
</template>
<script>
import { TimelineLite, Back, Elastic, Expo } from "gsap"
export default {
 mounted() {
  const { bubble, bubblePulse } = this.$refs
  const timeline = new TimelineLite()
  timeline.to(bubble, 0.4, {
   scale: 0.8,
   rotation: 16,
   ease: Back.easeOut.config(1.7),
  })
  timeline.to(
   bubblePulse,
   0.5,
   {
    scale: 0.9,
    opacity: 1,
   },
   '-=0.6'
  )
  this.timeline.to(bubble, 1.2, {
   scale: 1,
   rotation: '-=16',
   ease: Elastic.easeOut.config(2.5, 0.5),
  })
  this.timeline.to(
   bubblePulse,
   1.1,
   {
    scale: 3,
    opacity: 0,
    ease: Expo.easeOut,
   },
   '-=1.2'
  )
 }
}
</script>
<style>
/* CSS Emitted */
</style>

雖然一開始看起來很麻煩,但只要花點時間來理解它的實際運行情況,其實它只是一些按順序排列的 CSS transform屬性。這里有幾個自定義的 ease 特效,GASP 提供了一個有趣的小工具,你可以根據(jù)喜好自由配置:https://greensock.com/ease-visualizer

現(xiàn)在效果如下:

循環(huán)

上面的gif動畫其實具有欺騙性,gif圖片是循環(huán)的,但代碼不是,讓我們看看如何使用 GASP 和 VUE 循環(huán)播放動畫。GASP 的 TimelineLite提供了一個onComplete屬性,通過該屬性我們可以分配一個函數(shù),利用該函數(shù)我們可以循環(huán)動畫,另外,我們將通過data使timeline在組件的其余部分也可使用。

<template>
<!-- HTML Emitted -->
</template>
<script>
// ...
export default {
 data() {
  return {
   timeline: null,
  }
 },
 mounted() {
  // ...
  this.timeline = new TimelineLite({
   onComplete: () => this.timeline.restart()
  })
  // ...
 }
}
</script>
<style>
/* CSS Emitted */
</style>

現(xiàn)在 GASP 將會在動畫完成后又重新開始,效果如下:https://codepen.io/smlparry/pen/dqmEax

添加交互性
現(xiàn)在,我們的動畫效果已經(jīng)寫得差不多了,可以考慮添加一些交互特效。在本例中,我們將添加一個按鈕,來隨機更新氣泡中的logo。

為了能做到該需求,我們必須做以下幾件事:

  • 將圖片的引用源地址綁定到 VUE 的data中
  • 創(chuàng)建要使用的圖片數(shù)組
  • 創(chuàng)建隨機獲取logo的方法

添加按鈕來更改logo

<template>
 <div class="bubble-wrapper">
  <div ref="bubble" class="bubble">
   <img class="bubble-image"
      :src="currentLogo" />
  </div>
  <div ref="bubblePulse" class="bubble-pulse"></div>
 </div>
 <button @click="randomiseLogo">Random Logo</button>
</template>
<script>
// ...
export default {
 data() {
  return {
   timeline: null,
   logos: ['path/to/logo-1.svg', 'path/to/logo-2.svg', 'path/to/logo-3.svg'],
   currentLogo: '',
  }
 },
 methods: {
  randomiseLogo() {
   const logosToSample = this.logos.filter(logo => logo !== this.currentLogo)
   this.currentLogo = logosToSample[Math.floor(Math.random() * logosToSample.length)]
  }
 },
 mounted() {
  this.randomiseLogo()
  // ...
 }
}
</script>
<style>
/* CSS Emitted */
</style>

有了上面的代碼,現(xiàn)在我們可以通過一個按鈕來更新制作運行動畫的元素,通史也可以對其進行動畫制作,效果:https://codepen.io/smlparry/pen/RYMXPx

我使用了與上面動畫非常類似的技術(shù)來實現(xiàn)主頁的動畫效果,我從數(shù)組中選擇列表的下一個元素,然后將其append到列表中。

總結(jié)

以上所述是小編給大家介紹的通過GASP讓vue實現(xiàn)動態(tài)效果實例代碼詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

相關(guān)文章

  • vue實現(xiàn)點擊復制到粘貼板

    vue實現(xiàn)點擊復制到粘貼板

    這篇文章主要為大家詳細介紹了vue實現(xiàn)點擊復制到粘貼板,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Vue響應(yīng)式系統(tǒng)的原理詳解

    Vue響應(yīng)式系統(tǒng)的原理詳解

    這篇文章主要為大家介紹了Vue響應(yīng)式系統(tǒng)的原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • vue2項目使用exceljs多表頭導出功能詳解

    vue2項目使用exceljs多表頭導出功能詳解

    ExcelJS是一個用于在Node.js和瀏覽器中創(chuàng)建、讀取和修改Excel文件的強大JavaScript庫,下面這篇文章主要給大家介紹了關(guān)于vue2項目使用exceljs多表頭導出功能的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • VUE腳手架的下載和配置步驟詳解

    VUE腳手架的下載和配置步驟詳解

    這篇文章主要介紹了VUE腳手架下載和配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 詳解基于Vue的支持數(shù)據(jù)雙向綁定的select組件

    詳解基于Vue的支持數(shù)據(jù)雙向綁定的select組件

    這篇文章主要介紹了詳解基于Vue的支持數(shù)據(jù)雙向綁定的select組件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 在Vue組件化中利用axios處理ajax請求的使用方法

    在Vue組件化中利用axios處理ajax請求的使用方法

    這篇文章主要給大家介紹了在Vue組件化中利用axios處理ajax請求的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-08-08
  • Vue實現(xiàn)驗證碼功能

    Vue實現(xiàn)驗證碼功能

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)驗證碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 基于Vue2-Calendar改進的日歷組件(含中文使用說明)

    基于Vue2-Calendar改進的日歷組件(含中文使用說明)

    這篇文章主要介紹了基于Vue2-Calendar改進的日歷組件(含中文使用說明)的相關(guān)知識,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-04-04
  • 在Vue2中v-model和.sync區(qū)別解析

    在Vue2中v-model和.sync區(qū)別解析

    在vue2中提供了.sync修飾符,但是在vue3中不再支持.sync,取而代之的是v-model,本文給大家介紹在Vue2中v-model和.sync區(qū)別,感興趣的朋友一起看看吧
    2023-10-10
  • Vue中一個組件調(diào)用其他組件的方法詳解(非父子組件)

    Vue中一個組件調(diào)用其他組件的方法詳解(非父子組件)

    vue中最常見子父組件產(chǎn)值,大家一定都很熟悉,最近項目中碰到非父組件中調(diào)用子組件方法的問題,這篇文章主要給大家介紹了關(guān)于Vue中一個組件調(diào)用其他組件的方法(非父子組件),需要的朋友可以參考下
    2022-10-10

最新評論