1. 程式人生 > >求解! vue2.0實現購物車小球掉落特效第一次點選動畫失效(男默女淚的bug!)

求解! vue2.0實現購物車小球掉落特效第一次點選動畫失效(男默女淚的bug!)

點選新增按鈕時有一個小球掉落到購物車的特效,第一次點選時動畫特效沒有出來,且沒有進入afterEnter方法。後面點選都沒有問題。

效果如圖:(第一次點選)

但是我在enter方法裡面下了一個斷點之後就有動畫效果,且進入了afterEnter。效果如下:

希望大神幫我看看!非常感謝!

程式碼如下:

 <div class="ball-container">
            <div v-for="(ball, index) in balls" :key="index">
                <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>
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 === false) {
                    ball.show = true;
                    ball.el = el;  //設定小球的el屬性為一個dom物件  
                    this.dropBalls.push(ball);  
                    return;   //此處return終結函式,這意味著每次觸發事件,dropBalls內只增加一個ball
                }
            }
        },
        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; //小球掉落X軸起點
                    let y = -(window.innerHeight - rect.top - 22); //小球掉落Y軸起點,向下為負
                    el.style.display = '';
                    el.style.webkitTransform = `translate3d(0, ${y}px,0)`; /* Safari 和 Chrome */
                    el.style.transform = `translate3d(0, ${y}px,0)`; //旋轉div元素
                    // 處理內層動畫
                    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, done) {
           //關閉ESlint語法監測,因為ES6語言規範會讓被申明卻未被呼叫的變數報錯
            /* eslint-disable no-unused-vars */
            let rf = el.offestHeight; //申明rf是為了觸發瀏覽器的重排
            this.$nextTick(() => {
                //修改資料之後立即使用這個方法,獲取更新後的 DOM。
                el.style.webkitTransform = 'translate3d(0, 0, 0)'; /* Safari 和 Chrome */
                el.style.transform = 'translate3d(0, 0, 0)'; //旋轉div元素
                let inner = el.getElementsByClassName('inner-hook')[0];
                inner.style.webkitTransform = 'translate3d(0, 0, 0)';
                inner.style.transform = 'translate3d(0, 0, 0)';
                el.addEventListener('transitionend', done)   //Vue為了知道過渡的完成,否則無法進入到afterEnter中  
            });
        },
        afterEnter(el) {
            let ball = this.dropBalls.shift(); //把陣列的第一個元素從其中刪除,並返回第一個元素的值。
            if (ball) {
                ball.show = false;
                el.style.display = 'none'; //隱藏小球
            }
        }
    }
 .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.14); //貝塞爾曲線
            .inner {
                width: 16px;
                height: 16px;
                border-radius: 50%;
                background: rgb(0, 160, 220);
                transition: all 0.4s linear
            }
        }
    }

程式碼複製可用!

相關推薦

求解 vue2.0實現購物車小球掉落特效第一動畫失效bug!

點選新增按鈕時有一個小球掉落到購物車的特效,第一次點選時動畫特效沒有出來,且沒有進入afterEnter方法。後面點選都沒有問題。 效果如圖:(第一次點選) 但是我在enter方法裡面下了一個斷點之後就有動畫效果,且進入了afterEnter。效果如下: 希望大

Vue2.0實現購物車示例

簡介 vue.js是由華人尤雨溪開發的一套MVVM框架。vue.js 的核心是一個允許你採用簡潔的模板語法來宣告式的將資料渲染進 DOM 的系統,它非常適用於具有複雜互動邏輯的前端應用,如一些單頁應用程式,有很多表單操作,頁面中的內容需要根據使用者的操作動態變

使用vue2.0實現購物車和地址選配功能

涉及知識: 指定的使用:v-model v-text v-show v-if v-bind v-for v-on v-model:(雙向功能)主要在表單中使用,文字框,下拉框,單選,複選,textarea v-text:更多用於文字渲染,和{{}}是一個意思,若頁面沒載

vue2.0 實現導航守衛 --- 齊梟飛 前端開發攻城獅路由守衛 使用vue-router+vuex進行導航守衛

路由跳轉前做一些驗證,比如登入驗證,是網站中的普遍需求。 對此,vue-route 提供的 beforeRouteUpdate 可以方便地實現導航守衛(navigation-guards)。 導航守衛(navigation-guards)這個名字,聽起來怪怪的

揭祕月薪最容易過萬的工作,

        近期,前程無憂發起了“2017年職場人薪資滿意度調查”,在本次調查的受訪者中,超5成的人表示自己已經月薪過萬了。而在月薪過萬的受訪者中,22.2%的受訪者工作1年月薪就過萬,65.5%的受訪者工作3年內月薪破了萬,有88.1%的受訪者畢業後工作五年內月薪

Android ViewPager實現滑動切換頁面+底部tab切換頁面類微信首頁

目錄:1.實現功能概述2.程式碼實現 1.實現功能概述實現了滑動更換頁面同時切換底部Tab的圖示、文字的顏色,同時也支援點選底部Tab達到切換頁面的效果,有點類似微信首頁佈局 外帶實現toolbar overflow選單顯示圖示。 2.程式碼實現 2.1 效果截圖(資源來源

JS實現複製功能完美解決移動端可用

先看一下效果圖 使用此方法不需要轉換什麼<p>標籤,直接就使用<textarea>標籤,就是把它的樣式修改了一下,將背景和邊框都改為你要的顏色就可以了 上程式碼: //

0.2秒時間間隔內多只響應一事件

[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(todoSomething:) object:btn]; [self performSelector:@selecto

Vue2.0實現高仿餓了麼專案裡的小球飛入動畫

在學習Vue.js高仿餓了麼專案的過程中,有一個小球飛入購物車的動畫效果。專案是基於vue1.0的,如果是vue2.0的專案,該如何實現呢?自己也花時間研究了一會,從迷惑不解,各種嘗試未果,到後來咬文嚼字研讀vue 2.0官網關於過渡的章節,再到最終實現效果,心情十分愉悅,同

vue2.0實現圖片加載失敗認顯示圖片

bsp asset mage res highlight return ner url onerror <div class="bg"> <img :src="goods.phoneFloorAd.resUrl" :onerror="error

vue2.0 實現click擊當前li,動態切換class

一行 for ont pla false style function float del <template>  <div>    <ul>      <li v-for="(item,$index) in items" @cli

利用Vue.js2.0實現購物車和地址選配功能

  根據慕課網-利用Vue2.0實現購物車和地址選配功能教程,通過利用Vue2.0來實現電商平臺的簡單功能。   vue中的$http請求服務. 通過呼叫http服務,對.json檔案傳送http請求,通過遍歷陣列資料完成頁面渲染 引入vue-reso

基於vue2.0實現仿百度前端分頁效果

前言 上篇文章中,已經使用vue實現前端分頁效果,這篇文章我們單獨將分頁抽離出來實現一個分頁元件 先看實現效果圖 程式碼實現 按照慣例,我們在凍手實現的時候還是先想一想vue實現元件的思路 1、需要提前設定哪些引數需要暴露出來給父元件傳遞 <Paging

vue2.0 實現富文字編輯器功能

前端富文字編譯器使用總結: UEditor:百度前端的開源專案,功能強大,基於 jQuery,但已經沒有再維護,而且限定了後端程式碼,修改起來比較費勁 bootstrap-wysiwyg:微型,易用,小而美,只是 Bootstrap + jQuery... kindEditor:功能強大,程

vue2.0 實現漢字A-Z排序與手機通訊錄效果

先上一張效果圖: 列表html  template  (使用 ydui移動端UI  , 地址:http://vue.ydui.org/) <yd-cell-group v-for="item in memberList" :title="item

vue2.0實現擊後顯示,再次擊隱藏

all element cli html glob .com 狀態 right sna 描述。點擊系統切換,彈出系統切換框。再次點擊系統切換,隱藏。點擊其他地方。也會隱藏 在layout.vue中寫的html代碼 1、在main.js中寫入全局函數 // 定義全局點擊

element-ui+vue2.0 實現登入並實現一週內記住密碼

1.檔案目錄 2.主頁index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="

vue2.x實現購物車

看到網上vue實現購物車一個demo,但是發現問題挺多的,一些瀏覽器相容性也不好,還有一些寫法過於繁瑣,所以改寫了該demo重新發布,廢話不多說,直接貼程式碼. <!DOCTYPE html> <html> <head> <meta

詳解基於Vue2.0實現的移動端彈窗(Alert, Confirm, Toast)元件

wc-messagebox 基於 vue 2.0 開發的外掛 包含 Alert, Confirm, Toast, Prompt 仿照 iOS 原生UI(樣式來源: MUI) 一些想法 剛開始的時候想要用現成的彈窗元件來著, 但是查詢一圈沒有發現比較合適專

vue2.0 實現漢字A-Z排序與手機通訊錄效果

先上一張效果圖:列表html  template  (使用 ydui移動端UI  , 地址:http://vue.ydui.org/)<yd-cell-group v-for="item in memberList" :title="item.letter" :id=