微信小程序?qū)崿F(xiàn)漸入漸出動(dòng)畫效果
前言
在做小程序列表展示的時(shí)候,接到了一個(gè)需求。需要在列表展示的時(shí)候加上動(dòng)畫效果。設(shè)計(jì)視頻效果如下圖:
需要在進(jìn)入列表頁(yè)的時(shí)候,依次展示每一條卡片,在展示完成后需要隱藏掉當(dāng)天之前的卡片。
實(shí)現(xiàn)思路
實(shí)現(xiàn)該動(dòng)畫效果,首先需要給每個(gè)卡片添加一個(gè)css動(dòng)畫。因?yàn)槊總€(gè)卡片的顯示是有時(shí)間間隔的,以及考慮到展示完成后的隱藏效果,所以動(dòng)畫效果需要用js動(dòng)態(tài)去添加。在看了微信開發(fā)文檔后,發(fā)現(xiàn)微信小程序提供了Animation的一個(gè)動(dòng)畫對(duì)象,具體看了里面的參數(shù)后發(fā)現(xiàn),是可以實(shí)現(xiàn)需求上的效果的。具體使用如下api:
wx.createAnimation(Object object) 創(chuàng)建一個(gè)animation對(duì)象。最后通過(guò)動(dòng)畫實(shí)例的export方法導(dǎo)出動(dòng)畫數(shù)據(jù)傳遞給組件的 animation 屬性。里面有如下參數(shù):duration(動(dòng)畫持續(xù)時(shí)間,單位 ms),timingFunction(動(dòng)畫的國(guó)度效果),delay(動(dòng)畫延遲)
創(chuàng)建的animation對(duì)象,本次實(shí)現(xiàn)過(guò)程中需要用到如下屬性:
Animation.export() 可以導(dǎo)出動(dòng)畫隊(duì)列,export 方法每次調(diào)用后會(huì)清掉之前的動(dòng)畫操作。
Animation.step(Object object) 表示一組動(dòng)畫完成。可以在一組動(dòng)畫中調(diào)用任意多個(gè)動(dòng)畫方法,一組動(dòng)畫中的所有動(dòng)畫會(huì)同時(shí)開始,一組動(dòng)畫完成后才會(huì)進(jìn)行下一組動(dòng)畫。比如一組動(dòng)畫結(jié)束了,就以step()結(jié)尾
Animation.translateY(number translation) 在 Y 軸平移的距離,單位為 px
Animation.opacity(number value) 透明度 0-1的取值范圍
看到上面這些屬性,合理使用的話,那么實(shí)現(xiàn)需求提到動(dòng)畫效果那是穩(wěn)穩(wěn)的。
實(shí)現(xiàn)步驟
封裝一個(gè)方法,用來(lái)創(chuàng)建動(dòng)畫,并方便調(diào)用
/** * 動(dòng)畫實(shí)現(xiàn) * @method animationShow * @param {that} 當(dāng)前卡片 * @param {opacity} 透明度 * @param {delay} 延遲 * @param {isUp} 移動(dòng)方向 */ animationShow: function (that,opacity, delay, isUp) { let animation = wx.createAnimation({ duration: 1000, timingFunction: 'ease', delay: delay }); <!--考慮到還需要隱藏掉當(dāng)天之前的卡片,做如下判斷來(lái)賦予不同的動(dòng)畫效果--> if (isUp == 'down') { animation.translateY(0).opacity(opacity).step().translateY(-80).step(); } else if (isUp == 'up') { animation.translateY(0).opacity(opacity).step().translateY(-140).opacity(0).step() } else { animation.translateY(0).opacity(opacity).step() } let params = '' params = animation.export() return params },
初始化每個(gè)卡片的樣式
首先每個(gè)卡片的位置相對(duì)于自身往Y軸平移80像素,并且把透明度設(shè)置為0。這樣就可以進(jìn)入頁(yè)面的時(shí)候再往下平移并且讓卡片逐漸顯示。
.init{ opacity: 0; transform: translateY(-80px) }
處理數(shù)據(jù)
循環(huán)處理每一條數(shù)據(jù),通過(guò)調(diào)用封裝的方法,來(lái)獲得該卡片應(yīng)該擁有的動(dòng)畫屬性
for (let i = 0; i < transData.length; i++) { if (i == 0) { transData[i].animation = that.app.slideupshow(that, 1, 0, 'up') } else { transData[i].animation = that.app.slideupshow(that, 1, (i + 1) * 10, 'down') } }
給每個(gè)卡片附加animation屬性
<view class="init" animation="{{item.animation}}">
實(shí)現(xiàn)效果
跟設(shè)計(jì)視頻中的動(dòng)畫風(fēng)格基本保持一致,美滋滋。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- 微信小程序?qū)崿F(xiàn)元素漸入漸出動(dòng)畫效果封裝方法
- 微信小程序 小程序制作及動(dòng)畫(animation樣式)詳解
- 微信小程序的動(dòng)畫效果詳解
- 微信小程序 連續(xù)旋轉(zhuǎn)動(dòng)畫(this.animation.rotate)詳解
- 微信小程序?qū)崿F(xiàn)animation動(dòng)畫
- 微信小程序?qū)崿F(xiàn)登錄頁(yè)云層漂浮的動(dòng)畫效果
- 微信小程序scroll-view組件實(shí)現(xiàn)滾動(dòng)動(dòng)畫
- 微信小程序loading組件顯示載入動(dòng)畫用法示例【附源碼下載】
- 微信小程序開發(fā)animation心跳動(dòng)畫效果
- 微信小程序開發(fā)之錄音機(jī) 音頻播放 動(dòng)畫實(shí)例 (真機(jī)可用)
相關(guān)文章
javascript實(shí)現(xiàn)簡(jiǎn)約的頁(yè)面右下角點(diǎn)擊彈出窗口示例【測(cè)試可用】
這篇文章主要介紹了javascript實(shí)現(xiàn)的頁(yè)面右下角點(diǎn)擊彈出窗口功能,結(jié)合實(shí)例形式詳細(xì)分析了javascript頁(yè)面右下角點(diǎn)擊彈出窗口功能的相關(guān)步驟、原理與注意事項(xiàng),需要的朋友可以參考下2023-07-07JS實(shí)現(xiàn)倒計(jì)時(shí)圖文效果
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)倒計(jì)時(shí)圖文效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11微信小程序wx.getImageInfo()如何獲取圖片信息
這篇文章主要為大家詳細(xì)介紹了微信小程序wx.getImageInfo()如何獲取圖片信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01微信小程序判斷用戶是否需要再次授權(quán)獲取個(gè)人信息
這篇文章主要介紹了微信小程序判斷用戶是否需要再次授權(quán)獲取個(gè)人信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07js 實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)示例解析
這篇文章主要為大家介紹了js實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Javascript中的window.event.keyCode使用介紹
我們之前發(fā)過(guò)不少關(guān)于event.keyCode相關(guān)的文章,大家都可以參考下。2011-04-04