這篇文章主要介紹了使用css transition屬性實現一個帶有動畫顯隱的微信小程式部件的相關資料,需要的朋友可以參考下
我們先來看效果圖
像這樣的一個帶有過渡效果的小部件在我們實際開發中的應用幾率還是比較大的,但是在開發微信小程序的過程中可能有的小伙伴發現transition這個屬性它不好使(下面說明)所以我們這個時候會考慮去使用微信官方提供的wx.createAnimation API來創建動畫。
接下來我帶各位小夥伴如何讓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; } <!--index.wxml--> <view class="container"> <button bindtap="chanMask">点我</button> <view class="mask-con {{show ? 'mask-con-show' : ''}}"> <view class="close" bindtap="chanMask">X</view> 慢慢飞起 </view> </view>在上述程式碼中我們首先在data中定義了一個show變數用於mask-con控件的顯示狀態,在chanMask函數中交替的改變這個變量,然後將chanMask函數綁在定給button和close控件的點擊事件上,最後我們根據show來決定是否給mask-con(我們的動畫控件)添加一個class: mask-con-show那麼到這裡我們已經實現了一個帶過渡的顯隱小部件,但對於某些需求這還是太勉強了,例如下圖的情況:
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; } <!--index.wxml--> <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">X</view> 慢慢飞起 </view> </view> </view>在這裡我們設定了兩個樣式類別名稱mask-shadow-on和mask-con-show來定義陰影以及主要控制項mask- con動畫後的效果(具體程式碼根據自己的需求決定),看起來一切都OK,沒有任何問題,那麼先運行一波,艾瑪,神馬情況?陰影和我們的mask-con直接懟了出來毫無過渡效果,那這是何原因影響我們程序的效果呢,經過一番考量博主發現在display為none的情況之下我們的transition屬性可能會失效,那到這裡有的小伙伴可能會問「博主,那個不對啊,我們明明已經將mask的display設置成block怎麼還有這種問題呢」是這樣的,我們的mask控制它顯示需要那麼一點時間才能完全顯示出來,但是呢我們的變數show設定成true之後,我們的陰影控制和主要控制也會馬上加入上了動畫後樣式類名,這個時間它比mask顯示所需的時間要快,所以我們的機器它認為mask還是處於display為none的情況打個比方說:mask是這一整塊的老大,這個老大都還沒表演完事,你們這些做小弟就已經出來搶風頭了,你讓當老大的面子往哪放,不行我得把你們這些搶我風頭的都給幹掉,看你們還得瑟。這個老大的人狠話不多,你搶了他風頭不行,你想不表演他(用戶體驗)也不高興,而且他表演完了還不跟你說,那這個老大這麼難伺候該怎麼辦呢?有的小夥伴已經感覺到迷惘了嗎,還在等什麼,趕快拿起你手中的電話撥打求助專線。 。 。 。 。啊呸,扯遠了其實決解的方法很簡單,沒錯答案就是setTimeout()函數,來,我們把程式碼再改一遍:
page({ data: { show:false,//用于显示或隐藏mask控件 runAM:false//用于动画执行的根据 }, 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); } }) <!--index.wxml--> <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">X</view> 慢慢飞起 </view> </view> </view>在上述程式碼中,我們為data新加入了一個變數runAM用於動畫何時開始執行的憑證,再在chanMask函數定義了一個用於設定延時的變數delay 程式碼可能有點繞部落客在此粗暴的解釋一下程式的整個過程都是根據isShow這個變數來走的,當isShow為true時也就是說我們要開啟mask控制項了,所以我們先把mask控制顯示出來,然後在延時30毫秒後去為要執行動畫的控制添加上樣式類別名稱當isShow為false時我們先把動畫控制項的類別名稱去掉(去掉後會執行動畫回到原本的形態),然後在延時1000毫秒(動畫所需的時間)後讓mask隱藏關於delay的第一個值的設定時博主自己測出來的,如果各位小夥伴還擔心控制沒顯示的話可以設成50毫秒或100毫秒都無所這0.1秒的時間差對用戶體驗的影響並不大,如過你設了1秒都沒反應,我只能說換手機吧最後你會發現在整個過程中博主都只調用一個函數進行顯示或隱藏,並沒有為關閉新建函數處理,這種寫法逼格滿滿有木有
此方法同樣適用於H5
新人第一次寫部落格有點囉嗦了,望見諒
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
關於CSS中list-style修改清單屬性控制li標籤樣式的問題
以上是如何使用css transition屬性實作帶有動畫顯隱的微信小程式元件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

文章討論了CSS FlexBox,這是一種佈局方法,用於有效地對齊和分佈響應設計中的空間。它說明了FlexBox用法,將其與CSS網格進行了比較,並詳細瀏覽了瀏覽器支持。

本文討論了使用CSS創建響應網站的技術,包括視口元標籤,靈活的網格,流體媒體,媒體查詢和相對單元。它還涵蓋了使用CSS網格和Flexbox一起使用,並推薦CSS框架

本文討論了CSS盒裝屬性,該屬性控制了元素維度的計算方式。它解釋了諸如Content-Box,Border-Box和Padding-Box之類的值,以及它們對佈局設計和形式對齊的影響。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版
中文版,非常好用

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。