目錄一、效果展示一、效果展示
二、roundpainter
三、roundprogress
四、旋轉起來
五、停止旋轉
二、roundpainter
同上篇文章《九、flutter水波動畫》畫水波原理是一樣的,都是通過畫筆呈現不規則圖形。this.offsetlist是儲存載入的動畫裡面的實心圓的座標,通過drawcircle方法把座標畫到畫布上。
@override void paint(canvas canvas, size size) }
三、roundprogressroundprogress繼承statefulwidget通過 timer重新整理頁面,來達到動畫的效果。this.w * i / this.numofmoveview是計算每個實心圓的寬度的,i越小實心圓的寬度越小,實心圓就越小。(pi * 2.0 / this.numofmoveview) * i計算出弧度,通過弧度計算出每個實心圓的座標,儲存在this.offsetlist裡。每個實心圓初始化的弧度都儲存在了 this.radianlist裡,迴圈第二次,第三次......累計弧度,每個實心圓的座標逐一按弧度偏移,從而所有的實心圓繞著乙個點旋轉。
this.timer = timer.periodic(new duration(milliseconds: 80), (timer) r = r / 2.0; r = r * this.movesize; double w = r * sin(2 * pi / this.numofmoveview) / 2.0; r -= (w / 2.0); w = w * this.moveviewsize; this.r = r; this.w = w; list olist = ; list rlist = ; list radianlist = ; for (int i = 1; i < this.numofmoveview + 1; i++) olist.add(offset); rlist.add(w / 2.0); radianlist.add(radian); } this.offsetlist = olist; this.radiuslist = rlist; this.radianlist = radianlist; }); });
四、旋轉起來roundprogress最重的乙個引數loading,當loading = true載入動畫會在stack裡面呈現出來,當loading = false載入動畫不會出現在stack裡面。
this.loading = true; roundprogress( key: this.key, loading: this.loading, width: 160, height: 160, child: center( child: center( child: text("正在載入資料..."), )), ),
五、停止旋轉由於roundprogress繼承了statefulwidget,從外部就沒有辦法更新roundprogress資料了,可以通過元件間通訊。這裡使用的是global key通訊,可以訪問state物件的公共屬性和方法,從而讓載入動畫停止旋轉,重新整理元件。另外還有一種通訊方法是valuenotifier通訊,valuenotifier是乙個包含單個值的變更通知器,當它的值改變的時候,會通知它的監聽。
final key = globalkey(); setstate(() );
vue全域性loading動畫
首先我們需要寫乙個動畫樣式,這裡我們就用element ui裡的loading載入吧 this.store.state.show class big class loading v loading loading element loading text 拼命載入中 element loading ...
js spin 載入動畫(loading)
最近做頁面ajax載入是又用到loading動畫,還好有乙個spin.js 如果想在頁面裡出現loading動畫,大家只要這麼做就可以了 首先頁面裡要有 一定要有乙個包含.spin的標籤,然後呼叫 洒家 定義的function,就可以了 如 smallloadingicon w load 具體的lo...
VUE 跳轉loading動畫元件
內容如下 class loading div template export default script lang scss scoped loading style import loading from components loading.vue vue.component v loadin...