微信小程序?qū)崿F(xiàn)元素漸入漸出動畫效果封裝方法
開端
之前一直使用堪稱“萬能”的jQuery處理用戶交互的動畫,近日開發(fā)微信小程序,微信小程序高度限制的語法和功能使開源函數(shù)可謂對其“無能為力”。
那沒辦法,只好自己寫一個可以讓元素漸入漸出的,可復用的函數(shù)了。做到類似jQuery show()的效果
原創(chuàng)文章,允許轉(zhuǎn)載分享。但請轉(zhuǎn)載請一定標明出處,這是起碼的尊重
本文章閱讀前需要對微信小程序的動畫api有所了解
先看效果
可以看到,動畫效果十分流暢,高度復用,封裝好后只需要三行代碼實現(xiàn)動畫

解決
1.尋根問底,發(fā)現(xiàn)wx_mini_program(下面稱呼微信小程序為wxmp [差點叫成 (*´ノ皿`)mmp] )有一個全局的js邏輯文件,叫app.js,有意思,可以往里面塞自己寫的object(函數(shù)數(shù)據(jù)等等),那就從那里入手吧
2.在app.js中定義全局的動畫函數(shù)
App({
//漸入,漸出實現(xiàn)
show : function(that,param,opacity){
var animation = wx.createAnimation({
//持續(xù)時間800ms
duration: 800,
timingFunction: 'ease',
});
//var animation = this.animation
animation.opacity(opacity).step()
//將param轉(zhuǎn)換為key
var json = '{"' + param + '":""}'
json = JSON.parse(json);
json[param] = animation.export()
//設(shè)置動畫
that.setData(json)
},
//滑動漸入漸出
slideupshow:function(that,param,px,opacity){
var animation = wx.createAnimation({
duration: 800,
timingFunction: 'ease',
});
animation.translateY(px).opacity(opacity).step()
//將param轉(zhuǎn)換為key
var json = '{"' + param + '":""}'
json = JSON.parse(json);
json[param] = animation.export()
//設(shè)置動畫
that.setData(json)
},
//向右滑動漸入漸出
sliderightshow: function (that, param, px, opacity) {
var animation = wx.createAnimation({
duration: 800,
timingFunction: 'ease',
});
animation.translateX(px).opacity(opacity).step()
//將param轉(zhuǎn)換為key
var json = '{"' + param + '":""}'
json = JSON.parse(json);
json[param] = animation.export()
//設(shè)置動畫
that.setData(json)
}
})
3.現(xiàn)在我們再看看調(diào)用這個函數(shù)的具體方法
在wxml中,只需要設(shè)置animation綁定即可,以首頁index為例
// 這里是pages/page/index.wxml
//使用view包裹需要動畫的元素
//class中定義動畫開始前的初始樣式,如透明度=0,向下偏移200px等,animtion屬性填入綁定值
<view class="init" animation="{{slide_up1}}">
4.在該頁的js中
// 這里是pages/page/index.js //首先獲取小程序?qū)嵗?,訪問app.js中的函數(shù) this.app = getApp(); //調(diào)用show函數(shù),傳參 //注意:查看上面show函數(shù)定義查看參數(shù)含義 //第一個參數(shù)是當前的頁面對象,方便函數(shù)setData直接返回數(shù)據(jù) //第二個參數(shù)是綁定的數(shù)據(jù)名,傳參給setData,詳細見上面 //第三個參數(shù)是上下滑動的px,因為class="init"定義初始該元素向下偏移了200px,所以這里使其上移200px //第四個參數(shù)是需要修改為的透明度,這里是1,表示從初始的class="init"中定義的透明度0修改到1 this.app.slideupshow(this, 'slide_up1', -200, 1)
5.讓我們完善流程,達到預覽圖首頁的效果(有延時的邊上升邊出現(xiàn)效果)
wxml就是將各個容器分別綁定不同的變量,一個view容器就是一個動畫單位(可以這樣理解),如
<view class="init" animation="{{slide_up1}}">
<card>...</card>
</view>
<view class="init" animation="{{slide_up2}}">
<card>...</card>
</view>
頁面的js
//onload時獲取小程序?qū)嵗?
onLoad: function (options) {
this.app = getApp()
},
//頁面展示時,觸發(fā)動畫
onShow: function () {
this.app.slideupshow(this, 'slide_up1', -200, 1)
setTimeout(function () {
this.app.slideupshow(this, 'slide_up2', -200, 1)
}.bind(this), 200);
},
//頁面隱藏時,觸發(fā)漸出動畫
onHide: function () {
//你可以看到,動畫參數(shù)的200,0與漸入時的-200,1剛好是相反的,其實也就做到了頁面還原的作用,使頁面重新打開時重新展示動畫
this.app.slideupshow(this, 'slide_up1', 200, 0)
//延時展現(xiàn)容器2,做到瀑布流的效果,見上面預覽圖
setTimeout(function () {
this.app.slideupshow(this, 'slide_up2', 200, 0)
}.bind(this), 200);
}
以上所述是小編給大家介紹的微信小程序?qū)崿F(xiàn)元素漸入漸出動畫效果封裝方法詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript Typescript基礎(chǔ)使用教程
TypeScript是Microsoft(微軟)開發(fā)的一種開源編程語言,它充分利用了JavaScript原有的對象模型,并在此基礎(chǔ)上進行了擴充,TypeScript設(shè)計目標是開發(fā)大型應用,它可以編譯成純JavaScript,編譯出來的JavaScript可以運行在任何一種JS運行環(huán)境中2022-12-12
JavaScript數(shù)值轉(zhuǎn)換的三種方式總結(jié)
JavaScript數(shù)值轉(zhuǎn)換一般有三種方式,Number(param)函數(shù)、parseInt(param)、parseIFloat(param),下面為大家詳細介紹,需要的朋友可以參考下2014-07-07
JS生態(tài)系統(tǒng)加速探索Draft-js?emoji插件功能及使用探索
這篇文章主要介紹了JS生態(tài)系統(tǒng)加速探索Draft-js?emoji插件功能使用探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
js實現(xiàn)一個可以兼容PC端和移動端的div拖動效果實例
這篇文章主要介紹了js實現(xiàn)一個可以兼容PC端和移動端的div拖動效果實例,具有一定的參考價值,有需要的可以了解一下。2016-12-12
JavaScript自定義localStorage監(jiān)聽事件的解決方法
在項目開發(fā)過程中,發(fā)現(xiàn)有很多時候進行l(wèi)ocalStorage.setItem()操作設(shè)置本地存儲后,頁面必須刷新才能夠獲取到存儲數(shù)據(jù),為了解決這個問題,就必須要用到自定義localStorage監(jiān)聽事件了,所以本文給大家介紹了自定義localStorage監(jiān)聽事件,需要的朋友可以參考下2024-10-10
JavaScript中call,apply,bind的區(qū)別與實現(xiàn)
這篇文章主要介紹了JavaScript中call,apply,bind的區(qū)別與實現(xiàn),文章通過圍繞主題思想展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
JavaScript面向?qū)ο蟪绦蛟O(shè)計中對象的定義和繼承詳解
這篇文章主要介紹了JavaScript面向?qū)ο蟪绦蛟O(shè)計中對象的定義和繼承,結(jié)合實例形式詳細分析了javascript面向?qū)ο蟪绦蛟O(shè)計中對象定義、繼承、屬性、方法、深拷貝等相關(guān)概念與操作技巧,需要的朋友可以參考下2019-07-07

