成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

vue 2.0 購(gòu)物車(chē)小球拋物線

?xiaoxiao, / 3369人閱讀

摘要:第個(gè)問(wèn)題購(gòu)物車(chē)小球做拋物線運(yùn)動(dòng)。首先,落點(diǎn)都在購(gòu)物車(chē),小球則是隨機(jī)的。其次,拋物線運(yùn)動(dòng),只有在這段期間有,在期間是沒(méi)有的,因此,需要用提供的鉤子函數(shù)。獲取號(hào)位置小球是子組件。直接使用事件總線。

備注:此項(xiàng)目模仿 餓了嗎。我用的是最新的Vue, 視頻上的一些寫(xiě)法已經(jīng)被廢棄了。

布局代碼

css代碼(使用stylus寫(xiě)法)

.ball-container
  .ball
    position fixed
    left 32px
    bottom 22px
    z-index 200
    transition all 0.4s cubic-bezier(0.49,-0.29,0.75,0.41)
    .inner
      width 16px
      height 16px
      border-radius 50%
      background-color rgb(0,160,220)
      transition all 0.4s linear

js代碼

data() {
    return {
      balls : [
        {
          show: false
        },
        {
          show: false
        },
        {
          show: false
        },
        {
          show: false
        },
        {
          show: false
        }
      ],
      dropBalls: []
    };
},     
methods: {
    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 ;
        }
      }
    }
    beforeDrop(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);
          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)`;
        }
      }
    },
    dropping(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)";
      });
    },
    afterDrop(el){
      let ball = this.dropBalls.shift();
      if(ball) {
        ball.show = false;
        el.style.display = "none";
      }
    }
}

getBoundingClientRect()。方法請(qǐng)閱讀這篇文章
https://www.cnblogs.com/limei...

說(shuō)明:
goods 是一個(gè)組件,里面包含menu(div) , foods(div), shopcart(購(gòu)物車(chē)組件)。其中foods 包含cartcontrol(即小球組件)

組件之間的通信:
說(shuō)明:菜單和商品

第1個(gè)問(wèn)題:小球,需要獲取所點(diǎn)擊的商品的數(shù)量。
利用Vue的props,將foods值傳遞給cartcontrol。但是這樣有個(gè)問(wèn)題。即子組件更新,無(wú)法同步回父組件。且,在子組件中,對(duì)food注冊(cè)了一個(gè)count屬性,此屬性也無(wú)法同步回父組件(goods)。
解決方法:
導(dǎo)入全局的Vue。
利用Vue.set(target,key,value); 對(duì) target注冊(cè)count;

第2個(gè)問(wèn)題:小球點(diǎn)擊,將所點(diǎn)擊過(guò)的商品數(shù)目傳遞給 shopcart。
在goods的 computed:{} 定義一個(gè)方法,將該方法以props的方式,傳遞給shopcart。
因?yàn)?,shopcart,對(duì)傳遞過(guò)去的數(shù)據(jù)僅數(shù)據(jù)運(yùn)算(不會(huì)改變)。因此不用同步會(huì)父組件。

第3個(gè)問(wèn)題:購(gòu)物車(chē)小球做拋物線運(yùn)動(dòng)。
對(duì)于購(gòu)物車(chē)小球做拋物線運(yùn)動(dòng)。首先,落點(diǎn)都在購(gòu)物車(chē),小球則是隨機(jī)的。要做拋物線運(yùn)動(dòng),就要獲取,所點(diǎn)擊的 + 號(hào)的x,y位置。其次,拋物線運(yùn)動(dòng),只有在enter--> enter-to這段期間有,在leave--> leave-to 期間是沒(méi)有的,因此,需要用Vue提供的鉤子函數(shù)。

獲取 + 號(hào)x,y 位置:
小球(cartcontrol)是子組件。需要把數(shù)據(jù)傳遞給 goods(父組件)??梢允褂肰uex,或者直接使用事件總線。對(duì)于餓了嗎demo。直接使用事件總線。
創(chuàng)建一個(gè) 空的Vue。在 cartcontrol 中 ,通過(guò) Bus.$emit(key, ... arg); 注冊(cè)一個(gè)監(jiān)聽(tīng),然后再父組件 通過(guò)Bus.$on(key, function(... arg));監(jiān)聽(tīng)此方法。將所操作的 dom 對(duì)象傳遞過(guò)去即可

Vue提供的鉤子
這里要說(shuō)明一點(diǎn),Vue在他的官網(wǎng),對(duì)于只有過(guò)度的js,done是必須的,當(dāng)我加上done的時(shí)候,after-enter方法無(wú)法被執(zhí)行。
還有1個(gè)問(wèn)題,Vue官網(wǎng)推薦,只有過(guò)度效果,在做過(guò)度動(dòng)畫(huà)的元素上加上v-bind:class="false"。之前沒(méi)加,出現(xiàn)了,小球只能在第1次點(diǎn)擊的地方做過(guò)度效果。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/107125.html

相關(guān)文章

  • Vue仿餓了么app項(xiàng)目總結(jié)

    摘要:前言這是我第一個(gè)基于的項(xiàng)目作品,目的很簡(jiǎn)單,學(xué)以致用,將之前的前端知識(shí)積累加上目前流行的前端框架,以項(xiàng)目的形式展現(xiàn)出來(lái)。即將屬性和請(qǐng)求返回?cái)?shù)據(jù)對(duì)象合并到空對(duì)象,然后賦值給這里加上即提供了一種可擴(kuò)展的機(jī)制,倘若原來(lái)的屬性中有預(yù)定義的其他屬性。 前言 這是我第一個(gè)基于 Vue 的項(xiàng)目作品,目的很簡(jiǎn)單,學(xué)以致用,將之前的前端知識(shí)積累加上目前流行的前端框架,以項(xiàng)目的形式展現(xiàn)出來(lái)。 源代碼:ht...

    FrozenMap 評(píng)論0 收藏0
  • JS 實(shí)現(xiàn)物線動(dòng)畫(huà)

    摘要:陳家賓在做小程序的項(xiàng)目中,需要在添加購(gòu)物車(chē)的時(shí)候,增加拋物線小球動(dòng)畫(huà)。 author: 陳家賓 email: 617822642@qq.com date: 2018/2/24 在做小程序的項(xiàng)目中,需要在添加購(gòu)物車(chē)的時(shí)候,增加拋物線小球動(dòng)畫(huà)。 先給大家看下效果圖(其實(shí)已經(jīng)是實(shí)現(xiàn)后的效果了,順便給自己公司打廣告了哈哈) showImg(https://segmentfault.com/im...

    zollero 評(píng)論0 收藏0
  • Javascript中的物線 ~ 加入購(gòu)物車(chē)小動(dòng)畫(huà)

    摘要:上圖即為歸零后的坐標(biāo)系,對(duì)稱軸直線為在拋物線方程中,值得正負(fù)代表著拋物線的開(kāi)口方向,那么值的絕對(duì)值也和拋物線的開(kāi)口大小有著反比例的關(guān)系。 廢話不多說(shuō),先上DEMO~http://jsrun.net/PxKKp?uid=483再上源碼~https://github.com/Nelson2016... 運(yùn)行的原理 很簡(jiǎn)單的一個(gè)小特效,接下來(lái)來(lái)說(shuō)一下他的原理。 顯而易見(jiàn),這小東西肯定和拋物...

    sarva 評(píng)論0 收藏0
  • Javascript中的物線 ~ 加入購(gòu)物車(chē)小動(dòng)畫(huà)

    摘要:上圖即為歸零后的坐標(biāo)系,對(duì)稱軸直線為在拋物線方程中,值得正負(fù)代表著拋物線的開(kāi)口方向,那么值的絕對(duì)值也和拋物線的開(kāi)口大小有著反比例的關(guān)系。 廢話不多說(shuō),先上DEMO~http://jsrun.net/PxKKp?uid=483再上源碼~https://github.com/Nelson2016... 運(yùn)行的原理 很簡(jiǎn)單的一個(gè)小特效,接下來(lái)來(lái)說(shuō)一下他的原理。 顯而易見(jiàn),這小東西肯定和拋物...

    AZmake 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<