亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue 2.0 購物車小球拋物線的示例代碼

 更新時間:2018年02月01日 15:28:57   作者:心無私天地寬  
本篇文章主要介紹了vue 2.0 購物車小球拋物線的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文介紹了vue 2.0 購物車小球拋物線的示例代碼,分享給大家,具體如下:

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

布局代碼

<div class="ball-container">
 <transition name="drop"
       v-for="ball in balls"
       @before-enter="beforeDrop"
       @enter="dropping"
       @after-enter="afterDrop">
  <div v-show="ball.show" class="ball" v-bind:css="false">
   <div class="inner inner-hook" ></div>
  </div>
 </transition>
</div>

css代碼(使用stylus寫法)

.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()。方法請閱讀這篇文章http://chabaoo.cn/article/134208.htm

說明:

goods 是一個組件,里面包含menu(div) , foods(div), shopcart(購物車組件)。其中foods 包含cartcontrol(即小球組件)

組件之間的通信:說明:菜單和商品

第1個問題:小球,需要獲取所點(diǎn)擊的商品的數(shù)量。

利用Vue的props,將foods值傳遞給cartcontrol。但是這樣有個問題。即子組件更新,無法同步回父組件。且,在子組件中,對food注冊了一個count屬性,此屬性也無法同步回父組件(goods)。

解決方法:

導(dǎo)入全局的Vue。

利用Vue.set(target,key,value); 對 target注冊count;

第2個問題:小球點(diǎn)擊,將所點(diǎn)擊過的商品數(shù)目傳遞給 shopcart。

在goods的 computed:{} 定義一個方法,將該方法以props的方式,傳遞給shopcart。

因?yàn)?,shopcart,對傳遞過去的數(shù)據(jù)僅數(shù)據(jù)運(yùn)算(不會改變)。因此不用同步會父組件。

第3個問題:購物車小球做拋物線運(yùn)動。

對于購物車小球做拋物線運(yùn)動。首先,落點(diǎn)都在購物車,小球則是隨機(jī)的。要做拋物線運(yùn)動,就要獲取,所點(diǎn)擊的 + 號的x,y位置。其次,拋物線運(yùn)動,只有在enter--> enter-to這段期間有,在leave--> leave-to 期間是沒有的,因此,需要用Vue提供的鉤子函數(shù)。

獲取 + 號x,y 位置:

小球(cartcontrol)是子組件。需要把數(shù)據(jù)傳遞給 goods(父組件)??梢允褂肰uex,或者直接使用事件總線。對于餓了嗎demo。直接使用事件總線。

創(chuàng)建一個 空的Vue。在 cartcontrol 中 ,通過 Bus.$emit(key, ... arg); 注冊一個監(jiān)聽,然后再父組件 通過Bus.$on(key, function(... arg));監(jiān)聽此方法。將所操作的 dom 對象傳遞過去即可

Vue提供的鉤子

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue項(xiàng)目如何根據(jù)圖片url獲取file對象并用axios上傳

    Vue項(xiàng)目如何根據(jù)圖片url獲取file對象并用axios上傳

    這篇文章主要介紹了Vue項(xiàng)目如何根據(jù)圖片url獲取file對象并用axios上傳問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 關(guān)于vue的npm run dev和npm run build的區(qū)別介紹

    關(guān)于vue的npm run dev和npm run build的區(qū)別介紹

    這篇文章主要介紹了關(guān)于vue的npm run dev和npm run build的區(qū)別介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 淺談Vue Element中Select下拉框選取值的問題

    淺談Vue Element中Select下拉框選取值的問題

    下面小編就為大家分享一篇淺談Vue Element中Select下拉框選取值的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue使用electron生成桌面應(yīng)用過程詳解

    Vue使用electron生成桌面應(yīng)用過程詳解

    這篇文章主要介紹了Vue使用electron生成桌面應(yīng)用過程,很想使用 electron 制作一個桌面應(yīng)用,但是真的上手使用的時候才發(fā)現(xiàn) electron 的坑實(shí)在是太多了,先將遇到的坑記錄在這里,遇到一個記錄一個
    2023-04-04
  • Vue使用Swiper封裝輪播圖組件的方法詳解

    Vue使用Swiper封裝輪播圖組件的方法詳解

    Swiper是一個很常用的用于實(shí)現(xiàn)各種滑動效果的插件,PC端和移動端都能很好的適配。本文將利用Swiper實(shí)現(xiàn)封裝輪播圖組件,感興趣的可以了解一下
    2022-09-09
  • VUE引入騰訊地圖并實(shí)現(xiàn)軌跡動畫的詳細(xì)步驟

    VUE引入騰訊地圖并實(shí)現(xiàn)軌跡動畫的詳細(xì)步驟

    這篇文章主要介紹了VUE引入騰訊地圖并實(shí)現(xiàn)軌跡動畫,引入步驟大概是在 html 中通過引入 script 標(biāo)簽加載API服務(wù),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • vue項(xiàng)目實(shí)現(xiàn)通過ip地址訪問和localhost訪問方式

    vue項(xiàng)目實(shí)現(xiàn)通過ip地址訪問和localhost訪問方式

    這篇文章主要介紹了vue項(xiàng)目實(shí)現(xiàn)通過ip地址訪問和localhost訪問方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue?2?如何添加?register-service-worker?實(shí)現(xiàn)緩存請求的問題

    Vue?2?如何添加?register-service-worker?實(shí)現(xiàn)緩存請求的問題

    這篇文章主要介紹了Vue?2?如何添加?register-service-worker?以實(shí)現(xiàn)緩存請求的目的,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • vuex中mapState思想應(yīng)用

    vuex中mapState思想應(yīng)用

    這篇文章主要分享vuex中mapState思想及應(yīng)用,在需求開發(fā)過程中,有的接口返回的結(jié)果中有很多字段需要展示到頁面上。通??梢詫⑦@些字段在.vue文件中封裝為計(jì)算屬性,或者重新將對應(yīng)字段賦值到 data 中的字段來達(dá)到便于使用的目的,具體內(nèi)容,我們一起來看下面文章內(nèi)容吧
    2021-10-10
  • vue-Router安裝過程及原理詳細(xì)

    vue-Router安裝過程及原理詳細(xì)

    路由是網(wǎng)絡(luò)工程里面的專業(yè)術(shù)語,就是通過互聯(lián)把信息從源地址傳輸?shù)侥康牡刂返幕顒印1举|(zhì)上就是一種對應(yīng)關(guān)系。分為前端路由和后端路由。小編將再下面文章為大家做詳細(xì)介紹,感興趣的小伙伴請和小編一起來學(xué)習(xí)吧
    2021-09-09

最新評論