<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:20:40
        文檔

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

        vue 2.0 購物車小球拋物線的示例代碼:本文介紹了vue 2.0 購物車小球拋物線的示例代碼,分享給大家,具體如下: 備注:此項目模仿 餓了嗎。我用的是最新的Vue, 視頻上的一些寫法已經被廢棄了。 布局代碼 <div class=ball-container> <transition name=drop
        推薦度:
        導讀vue 2.0 購物車小球拋物線的示例代碼:本文介紹了vue 2.0 購物車小球拋物線的示例代碼,分享給大家,具體如下: 備注:此項目模仿 餓了嗎。我用的是最新的Vue, 視頻上的一些寫法已經被廢棄了。 布局代碼 <div class=ball-container> <transition name=drop

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

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

        布局代碼

        <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()。方法請閱讀這篇文章//www.gxlcms.com/article/134208.htm

        說明:

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

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

        第1個問題:小球,需要獲取所點擊的商品的數量。

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

        解決方法:

        導入全局的Vue。

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

        第2個問題:小球點擊,將所點擊過的商品數目傳遞給 shopcart。

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

        因為,shopcart,對傳遞過去的數據僅數據運算(不會改變)。因此不用同步會父組件。

        第3個問題:購物車小球做拋物線運動。

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

        獲取 + 號x,y 位置:

        小球(cartcontrol)是子組件。需要把數據傳遞給 goods(父組件)。可以使用Vuex,或者直接使用事件總線。對于餓了嗎demo。直接使用事件總線。

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

        Vue提供的鉤子

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

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        vue 2.0 購物車小球拋物線的示例代碼:本文介紹了vue 2.0 購物車小球拋物線的示例代碼,分享給大家,具體如下: 備注:此項目模仿 餓了嗎。我用的是最新的Vue, 視頻上的一些寫法已經被廢棄了。 布局代碼 <div class=ball-container> <transition name=drop
        推薦度:
        標簽: VUE 購物車 代碼
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 伊人久久亚洲综合| 成人午夜亚洲精品无码网站| 亚洲精品国产成人| 3d成人免费动漫在线观看| 亚洲精品成a人在线观看夫| 成人免费视频一区| 亚洲av日韩综合一区久热| 国产成人精品123区免费视频| 亚洲av午夜电影在线观看| 免费大黄网站在线观看| 国产97视频人人做人人爱免费| 在线观看国产区亚洲一区成人| 成人免费一区二区三区| 亚洲国产国产综合一区首页| 中文字幕日韩亚洲| 一区二区三区免费视频播放器| 亚洲熟妇av一区二区三区| 国产一区二区免费| 亚洲国产午夜电影在线入口| 手机在线毛片免费播放| 麻豆69堂免费视频| 亚洲成a人片在线观看日本| 99热这里只有精品6免费| 亚洲一区在线免费观看| 亚洲A∨精品一区二区三区| 成人片黄网站色大片免费观看APP| 亚洲自偷自偷精品| 午夜视频免费成人| 中文字幕成人免费高清在线 | 亚洲字幕在线观看| 国产精品免费观看久久| 美女视频黄频a免费| 亚洲AV本道一区二区三区四区| 午夜性色一区二区三区免费不卡视频| 亚洲一区二区三区写真| 亚洲日韩乱码中文无码蜜桃臀网站 | 国产亚洲精aa在线看| 亚洲无线码在线一区观看| 无码国产精品一区二区免费I6| 日韩a毛片免费观看| 亚洲同性男gay网站在线观看|