ionic3實現三種回頂部操作
第一種:
用id獲取模板中content中最高的那個元素,給元素設定id:
id="topest"
然後觸發方法:
toView(){
let element = document.getElementById("topest");
if(element){
element.scrollIntoView();
}
這也就是我們常說的錨點,這種方法是直接跳到該元素的,體驗不是很好,不要用。
第二種:
首先匯入:
import { Content } from 'ionic-angular';
然後獲取content的例項:
@ViewChild(Content) content: Content;
然後呼叫content的scrollToTop()
toTop() {
this.content.scrollToTop();
}
這種是滾動上去的。
然而,當content設定為fullscreen時,header會覆蓋一部分(不會完全滑動上去),如圖:
所以
第三種方法:
滾動到指定座標位置,三個引數依次為座標x,y,滾動時間(毫秒單位)。
scrollTo(){
this.content.scrollTo(0, 0, 300)
}
第二種的scrollToTop(),還有這個scrollTo(0, 0, 300)都是content的方法。更多詳情請參考官網。我開始學的時候,就看到它是content標籤,其他就不管了。後來再回去看時,發現還有很多有用的內容。這再次告訴我們,多看官網是沒錯的。
以上的方法在哪裡觸發呢,常見的就是用個FabButton,另一種就是雙擊頂部(如微信朋友圈)
翻譯得不是很好哈。
然而FabButton一直放在那裡,也不是很好,下面實現滾動到底部時顯示,回到頂部後隱藏:
給FabButton新增:
*ngIf="top"
給content新增事件,當滾動時觸發:(ionScroll)=”check()”
在ts中,top=false;
check():content有個屬性scrollTop,為可見檢視的最高元素到content頂部的距離(可理解為向下滑動的距離),滑動時,檢查它是否大於指定距離,如果為true,則設定top為true,以顯示FabButton。
check(){
if(this.content.scrollTop>400){
this.top = true;
}else{
this.top = false;
}
this.cd.detectChanges();
}
但是,ng並沒有智慧到一有資料變更就能自動檢測到的,有些特殊情況,並沒有觸發ng的變更檢測。所以當你已經滑下來了,頁面是沒有顯示FabButton的。
解決:手動觸發變更檢測,以渲染模板
首先,在ts匯入:
import { Component, ChangeDetectorRef } from '@angular/core';
然後在建構函式裡注入:
constructor(private cd: ChangeDetectorRef)
最終在更新變數後,手動呼叫程式碼,強制頁面檢查重新整理即可:
this.cd.detectChanges();
然而,button突變式的顯示與消失,也不好,哈哈。可以為其新增進場與離場動畫哦。
雙擊回頂部
這個沒什麼好說的,就像微信朋友圈那樣,在title繫結雙擊事件(dblclick)就可以了
末學菜鳥一隻,如有錯誤請指出,不勝感激。