vue 2.x實(shí)現(xiàn)動(dòng)畫(huà)效果

vue 2.x開(kāi)始技羔,動(dòng)畫(huà)效果的實(shí)現(xiàn)都已經(jīng)抽象成一個(gè)內(nèi)建的組件了蜈漓,transition

<!-- 簡(jiǎn)單元素 -->
<transition>
  <div v-if="ok">toggled content</div>
</transition>
<!-- 動(dòng)態(tài)組件 -->
<transition name="fade" mode="out-in" appear>
  <component :is="view"></component>
</transition>
<!-- 事件鉤子 -->
<div id="transition-demo">
  <transition @after-enter="transitionComplete">
    <div v-show="ok">toggled content</div>
  </transition>
</div>

1. transition標(biāo)簽屬性設(shè)置需要的動(dòng)畫(huà)類型

<transition name="move">
      <div class="cart-decrease" v-show="food.count>0" @click="decreaseCart($event)">
        <span class="inner icon-remove_circle_outline"></span>
      </div>
</transition>

2. 給需要設(shè)置成動(dòng)畫(huà)的元素設(shè)計(jì)樣式

    .cart-decrease
      display: inline-block
      padding: 6px
      transition: all 0.4s linear
      .inner
        display: inline-block
        font-size: 24px
        line-height: 24px
        color: rgb(0, 160, 220)
        transition: all 0.4s linear
        transform: rotate(0)
      &.move-enter-active
        opacity: 1
        transform: translate3d(0, 0, 0)
      &.move-enter, &.move-leave
        opacity: 0
        transform: translate3d(24px, 0, 0)
        .inner
          transform: rotate(180deg)

3.實(shí)現(xiàn)添加購(gòu)物車(chē)時(shí),小球拋物線進(jìn)購(gòu)物車(chē)的示例

<div class="cart-add icon-add_circle" @click="addCart($event)"></div>

添加購(gòu)物車(chē)的小球娩怎,單擊事件的時(shí)候,在處理函數(shù)中加入this.$emit('cartadd', event.target),該方法能將當(dāng)前元素節(jié)點(diǎn)作為參數(shù)傳給父組件,其中方法的第一個(gè)參數(shù)為事件名斥扛,父組件的監(jiān)聽(tīng)器會(huì)監(jiān)聽(tīng)該事件。

<cartcontrol :food="food" @cartadd="_drop"></cartcontrol>

父組件監(jiān)聽(tīng)到cartadd事件后丹锹,會(huì)調(diào)用方法對(duì)象里面的_drop函數(shù)

methods: {
...
,
_drop (target) {
        this.$nextTick(() => {
          this.$refs.shopCart.drop(target)
        })
      },
...
}

_drop函數(shù)會(huì)執(zhí)行注冊(cè)的引用信息名ref為shopCart的子組件的drop方法
shopCart子組件中的methods對(duì)象中稀颁,實(shí)現(xiàn)了drop方法

    drop (el) {
        for (let i = 0; i < this.balls.length; i++) {
          let ball = this.balls[i]
          if (!ball.show) {
            ball.show = true
            ball.el = el
            this.dropBalls.push(ball)
            return true
          }
        }
      }

該方法會(huì)把小球的show屬性由false改為true芬失,元素屬性綁定為由$emit實(shí)例方法傳出來(lái)得event.target元素。在該實(shí)例中就是添加按鈕匾灶,即將成為小球的元素棱烂。
shopCart子組件中實(shí)現(xiàn)的動(dòng)畫(huà)樣式

    <div class="ball-container">
      <div v-for="ball in balls">
        <transition name="drop" @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter">
          <div v-show="ball.show" class="ball">
            <div class="inner inner-hook"></div>
          </div>
        </transition>
      </div>
    </div>

transition組件監(jiān)聽(tīng)器監(jiān)聽(tīng)的事件有before-enter、enter阶女、after-enter事件颊糜。事件方法需要自己實(shí)現(xiàn)
(shopCart子組件的methods對(duì)象中實(shí)現(xiàn)以下方法)

    beforeEnter (el) {
        let count = this.balls.length
        while (count--) {
          let ball = this.balls[count]
          if (ball.show) {
            let rect = ball.el.getBoundingClientRect()
            let x = rect.left - 32
            let y = -(window.innerHeight - rect.top - 22)
    //            console.log(x, y)
            el.style.display = ''
            el.style.webkitTransform = `translate3d(0, ${y}px, 0)`
            el.style.transform = `translate3d(0, ${y}px, 0)`
            let inner = el.getElementsByClassName('inner-hook')[0]
            inner.style.webkitTransform = `translate3d(${x}px, 0, 0)`
            inner.style.transform = `translate3d(${x}px, 0, 0)`
          }
        }
      },
      enter (el) {
        /* eslint-disable no-unused-vars */
        let rf = el.offsetHeight
        this.$nextTick(() => {
          el.style.webkitTransform = 'translate3d(0, 0, 0)'
          el.style.transform = 'translate3d(0, 0, 0)'
          let inner = el.getElementsByClassName('inner-hook')[0]
          inner.style.webkitTransform = 'translate3d(0, 0, 0)'
          inner.style.transform = 'translate3d(0, 0, 0)'
        })
      },
      afterEnter (el) {
        let ball = this.dropBalls.shift()
        if (ball) {
          ball.show = false
          el.style.display = 'none'
        }
      }

注意別忘了在shopCart子組件中實(shí)現(xiàn)data屬性方法

    data () {
      return {
        balls: [
          {
            show: false
          }, {
            show: false
          }, {
            show: false
          }, {
            show: false
          }, {
            show: false
          }],
        dropBalls: []
      }
    },

該方法提供了我們要操作的小球數(shù)組,還有拋出的小球數(shù)組秃踩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衬鱼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吞瞪,更是在濱河造成了極大的恐慌馁启,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芍秆,死亡現(xiàn)場(chǎng)離奇詭異惯疙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)妖啥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)霉颠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人荆虱,你說(shuō)我怎么就攤上這事蒿偎。” “怎么了怀读?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵诉位,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我菜枷,道長(zhǎng)苍糠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任啤誊,我火速辦了婚禮岳瞭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚊锹。我一直安慰自己瞳筏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布牡昆。 她就那樣靜靜地躺著姚炕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钻心,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天凄硼,我揣著相機(jī)與錄音,去河邊找鬼捷沸。 笑死摊沉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痒给。 我是一名探鬼主播说墨,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼苍柏!你這毒婦竟也來(lái)了尼斧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤试吁,失蹤者是張志新(化名)和其女友劉穎棺棵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體熄捍,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烛恤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了余耽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缚柏。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碟贾,靈堂內(nèi)的尸體忽然破棺而出币喧,到底是詐尸還是另有隱情,我是刑警寧澤袱耽,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布杀餐,位于F島的核電站,受9級(jí)特大地震影響朱巨,放射性物質(zhì)發(fā)生泄漏怜浅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一蔬崩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搀暑,春花似錦沥阳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春功炮,著一層夾襖步出監(jiān)牢的瞬間溅潜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工薪伏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滚澜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓嫁怀,卻偏偏與公主長(zhǎng)得像设捐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子塘淑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)萝招、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 1.安裝 可以簡(jiǎn)單地在頁(yè)面引入Vue.js作為獨(dú)立版本存捺,Vue即被注冊(cè)為全局變量槐沼,可以在頁(yè)面使用了。 如果希望搭建...
    Awey閱讀 11,024評(píng)論 4 129
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容捌治,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容岗钩。關(guān)于...
    云之外閱讀 5,050評(píng)論 0 29
  • 你的臉上云淡風(fēng)輕,誰(shuí)也不知道你的牙咬得有多緊具滴。你走路帶著風(fēng)凹嘲,誰(shuí)也不知道你膝蓋上仍有曾摔傷的淤青。你笑得沒(méi)心沒(méi)肺构韵,沒(méi)...
    帥氣素寶閱讀 232評(píng)論 0 0
  • 趁天還沒(méi)十分冷周蹭,回趟家鄉(xiāng)度個(gè)假。疲恢。拍了很多照片凶朗,很可惜,我不擅長(zhǎng)畫(huà)風(fēng)景显拳,那些照片棚愤,發(fā)個(gè)朋友圈,也就罷了杂数,并不能把它...
    陳狂閱讀 1,895評(píng)論 51 78