【餓了麼】—— Vue2.0高仿餓了麼核心模組&移動端Web App專案爬坑(二)
阿新 • • 發佈:2018-12-31
methods: { dropMove(el) { // console.log(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; } } }, beforeEnter(el, done) { 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 //ball-container left:32 let y = -(window.innerHeight - rect.top -22); el.style.display = ''; el.style.transform = `translate3d(0,${y}px,0)`;//外層元素縱向移動 el.style.webkitTransform = `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)`; // console.log(el); } } }, dropEnter(el, done) { /*手動取到offsetHeight, 觸發瀏覽器重繪*/ 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)' el.addEventListener('transitionend', done) // Vue為了知道過渡的完成,必須設定相應的事件監聽器。它可以是transitionend或 animationend }) // console.log(el); }, afterEnter(el) { let ball = this.dropBalls.shift(); if(ball) { ball.show = false; el.style.display = 'none'; } // console.log(el); }