摘要:我們先來看效果圖像這樣的一個帶過渡效果的小部件在我們實際開發(fā)中的應(yīng)用幾率還是比較大的,但是在開發(fā)微信小程序的過程中可能有的小伙伴發(fā)現(xiàn)這個屬性它不好使下面說明所以我們這個時候會考慮去使用微信官方提供的來創(chuàng)建動畫。
我們先來看效果圖
像這樣的一個帶過渡效果的小部件在我們實際開發(fā)中的應(yīng)用幾率還是比較大的,但是在開發(fā)微信小程序的過程中可能有的小伙伴發(fā)現(xiàn)transition這個屬性它不好使(下面說明)所以我們這個時候會考慮去使用微信官方提供的wx.createAnimation API來創(chuàng)建動畫。
接下來我?guī)Ц魑恍』锇槿绾巫?transition 屬性在這種需求中好使起來,下面上代碼
page({ data: { show:false//用于顯示或隱藏控件 }, chanMask:function(){ var isShow = this.data.show ? false : true;//如果顯示就隱藏,隱藏就顯示 this.setData({ show:isShow }) } })
/*index.wxss*/ /*顯示前*/ .mask-con{ transition: 1s; position: fixed; width: 100%; height: 300rpx; left: 0; bottom: -300rpx; text-align: center; line-height: 300rpx; box-shadow: 0 1px 10px #aaa; } /*顯示后*/ .mask-con-show{ bottom: 0; }
<view class="container"> <button bindtap="chanMask">點我button> <view class="mask-con {{show ? mask-con-show : }}"> <view class="close" bindtap="chanMask">Xview> 慢慢飛起 view> view>
在以上代碼中我們首先在data中定義了一個show變量用于mask-con控件的顯示狀態(tài),在chanMask函數(shù)中交替的改變這個變量,然后將chanMask函數(shù)綁定給button和close控件的點擊事件上,最后我們根據(jù)show來決定是否給mask-con(我們的動畫控件)添加一個class: mask-con-show那么到這里我們已經(jīng)實現(xiàn)了一個帶過渡的顯隱小部件,但是對于某些需求這還是太勉強了,比如下圖的情況:
現(xiàn)在很多的APP或小程序都是以這種方式來close彈窗控件,那個X用戶點的不過癮,看到這里聰明的小伙伴可能會想到再另外添加一個陰影控件在mask-con的下層并綁定上我們的chanMask函數(shù),這樣的話陰影控件和我們的mask-con就可能不是在一個整體上了,不夠直觀,又比如說領(lǐng)導(dǎo)要讓這個陰影它有一個顯示顏色慢慢加深,隱藏慢慢減淡的效果,為了應(yīng)對這種情況,我們把代碼調(diào)整如下:
page({ data: { show:false//用于顯示或隱藏mask控件 }, chanMask:function(){ var isShow = this.data.show ? false : true;//如果顯示就隱藏,隱藏就顯示 this.setData({ show:isShow }) } })
/*index.wxss*/ .mask-shadow{ width: 100%; height: 100%; opacity: 0; transition: 1s; } .mask-shadow-on{ opacity: 0.3; } .mask-con{ position: absolute; width: 100%; height: 300rpx; left: 0; bottom: -300rpx; transition: 1s; text-align: center; line-height: 300rpx; box-shadow: 0 1px 10px #aaa; } .mask-con-show{ bottom: 0; }
<view class="container"> <button bindtap="chanMask">點我button> <view class="mask {{show ? show : hide}}"> <view class="mask-shadow {{show ? mask-shadow-on : }}">view> <view class="mask-con {{show ? mask-con-show : }}"> <view class="close" bindtap="chanMask">Xview> 慢慢飛起 view> view> view>
在這里我們設(shè)置了兩個樣式類名mask-shadow-on和mask-con-show來定義陰影以及主要控件mask-con動畫后的效果(具體代碼根據(jù)自己的需求決定),看起來一切都OK,沒有任何問題,那么先運行一波,艾瑪,神馬情況?陰影和我們的mask-con直接懟了出來毫無過渡效果,那這是何原因影響我們程序的效果呢,經(jīng)過一番考量博主發(fā)現(xiàn)在display為none的情況之下我們的transition屬性可能會失效,那到這里有的小伙伴可能會問 “博主,那個不對啊,我們明明已經(jīng)將mask的display設(shè)置成block怎么還有這種問題呢”
是這樣的,我們的mask控件它顯示需要那么一點時間才能完全顯示出來,但是呢我們的變量show設(shè)置成true之后,我們的陰影控件和主要控件也會馬上添加上了動畫后樣式類名,這個時間它比mask顯示所需的時間要快,所以我們的機器它認(rèn)為mask還是處于display為none的情況
打個比方說:mask是這一整塊的老大,這個老大都還沒表演完事,你們這些做小弟就已經(jīng)出來搶風(fēng)頭了,你讓當(dāng)老大的面子往哪放,不行我得把你們這些搶我風(fēng)頭的都給干掉,看你們還得瑟。這個老大的人狠話不多,你搶了他風(fēng)頭不行,你想不表演他(用戶體驗)也不高興,而且他表演完了還不跟你說,那這個老大這么難伺候該怎么辦呢?有的小伙伴已經(jīng)感覺到迷茫了嗎,那還在等什么,趕快拿起你手中的電話撥打求助熱線。。。。。啊呸,扯遠(yuǎn)了
其實決解的方法很簡單,沒錯答案就是 setTimeout()函數(shù),來,我們把代碼再改一遍:
page({ data: { show:false,//用于顯示或隱藏mask控件 runAM:false//用于動畫執(zhí)行的根據(jù) }, chanMask:function(){ var isShow = this.data.show ? false : true;//如果顯示就隱藏,隱藏就顯示 var delay = isShow ? 30 : 1000;//第一個時間是博主測出來控件顯示所需的時間,第二個是動畫所需的時間 if(isShow){ this.setData({ show:isShow }); }else{ this.setData({ runAM:isShow }) } setTimeout(function(){ if(isShow){ this.setData({ runAM:isShow }); }else{ this.setData({ show:isShow }); } }, delay); } })
<view class="container"> <button bindtap="chanMask">點我button> <view class="mask {{show ? show : hide}}" bindtap="chanMask"> <view class="mask-shadow {{runAM ? mask-shadow-on : }}">view> <view class="mask-con {{runAM ? mask-con-show : }}"> <view class="close" bindtap="chanMask">Xview> 慢慢飛起 view> view> view>
在以上代碼中,我們給data新添加了一個變量runAM用于動畫何時開始執(zhí)行的憑證,再在chanMask函數(shù)定義了一個用于設(shè)置延時的變量delay 代碼可能有點繞博主在此粗暴的解釋一下
程序的整個過程都是根據(jù)isShow這個變量來走的,
當(dāng)isShow為true時也就是說我們要打開mask控件了,所以我們先把mask控件顯示出來,然后在延時30毫秒后去為要執(zhí)行動畫的控件添加上樣式類名
當(dāng)isShow為false時我們先把動畫控件的類名去掉(去掉后會執(zhí)行動畫回到原本的形態(tài)),然后在延時1000毫秒(動畫所需的時間)后讓mask隱藏
關(guān)于delay的第一個值的設(shè)定時博主自己測出來的,如果各位小伙伴還擔(dān)心控件沒顯示的話可以設(shè)成50毫秒或100毫秒都無所這0.1秒的時間差對用戶體驗的影響并不大,如過你設(shè)了1秒都沒反應(yīng),我只能說換手機吧
最后你會發(fā)現(xiàn)在整個過程中博主都只調(diào)用一個函數(shù)進(jìn)行顯示或隱藏,并沒有為關(guān)閉新建函數(shù)處理,這種寫法逼格滿滿有木有
此方法同樣適用于H5
新人第一次寫博客有點啰嗦了,望見諒
GitHub連接 https://github.com/1441327053/frontEnd-WXapp/tree/master/widget-transition
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/2115.html
摘要:層疊即表示允許以多種方式來描述樣式,一個元素可以被渲染呈現(xiàn)出多種樣式。可以讓屬性的變化過程持續(xù)一段時間,而不是立即生效。比如,將元素的顏色從白色改為黑色,通常這個改變是立即生效的,使用后,將按一個曲線速率變化。 showImg(https://segmentfault.com/img/bVZwyL?w=900&h=385); CSS 的全稱是 Cascading Style Sheet...
摘要:在寫微信小程序時,有寫到實現(xiàn)輪播圖的效果,可以直接使用微信小程序中自帶的組件來實現(xiàn)效果圖如下的相關(guān)屬性是否顯示小圓點,也可以自己重新設(shè)置小圓點是否銜接滑動,就是實現(xiàn)無限滾動與上一張圖片的間距與下一張圖片的間距實現(xiàn)自動滾動這里主要利用了 在寫微信小程序時,有寫到實現(xiàn)3D輪播圖的效果,可以直接使用微信小程序中自帶的組件swiper來實現(xiàn) 效果圖如下: showImg(https://seg...
摘要:前端知識點總結(jié)什么是第三方的極簡化的操作的函數(shù)庫第三方下載極簡化是操作的終極簡化個方面增刪改查事件綁定動畫效果操作學(xué)習(xí)還是在學(xué),只不過簡化了函數(shù)庫中都是函數(shù),用函數(shù)來解決一切問題為什么使用操作的終極簡化解決了大部分瀏覽器兼容性問題凡是讓用的 前端知識點總結(jié)——JQ 1.什么是jQuery: jQuery: 第三方的極簡化的DOM操作的函數(shù)庫 第三方: 下載 極簡化: 是DOM操作的...
閱讀 713·2023-04-25 19:43
閱讀 3910·2021-11-30 14:52
閱讀 3784·2021-11-30 14:52
閱讀 3852·2021-11-29 11:00
閱讀 3783·2021-11-29 11:00
閱讀 3869·2021-11-29 11:00
閱讀 3558·2021-11-29 11:00
閱讀 6105·2021-11-29 11:00