添加滚动到顶部按钮(Ionic 2 | Typescript)
Add a scroll to top button (Ionic 2 | Typescript)
大家好,我正在尝试添加实现以下内容的 "scroll to top button.":
1.Show 用户向下滚动时的按钮。
2.Hide 用户向上滚动时的按钮。
3.If 点击按钮然后滚动到顶部并隐藏按钮。
有什么正确的建议吗?
非常感谢
Plunker Demo
要完成这项工作,您需要:
- 创建一个将
scroll-content
元素滚动到顶部的函数
- 跟踪
scroll-content
的滚动位置
- 在滚动到顶部按钮上使用
*ngIf
以在 scroll-content
达到特定阈值后有条件地显示。
滚动到顶部功能
我改编了 this SO answer 以应用于 scroll-content
元素
scrollToTop(scrollDuration) {
let scrollStep = -this.ionScroll.scrollTop / (scrollDuration / 15);
let scrollInterval = setInterval( () => {
if ( this.ionScroll.scrollTop != 0 ) {
this.ionScroll.scrollTop = this.ionScroll.scrollTop + scrollStep;
} else {
clearInterval(scrollInterval);
}
}, 15);
追踪scroll-content
位置
此示例使用 window 高度作为显示滚动到顶部按钮的阈值,如下所示:
this.ionScroll.addEventListener("scroll", () => {
if (this.ionScroll.scrollTop > window.innerHeight) {
this.showButton = true;
} else {
this.showButton = false;
}
});
按钮Html
<button *ngIf="showButton" (click)="scrollToTop(1000)">Scroll Top</button>
完整组件 Typescript
import { NavController } from 'ionic-angular/index';
import { Component, OnInit, ElementRef } from "@angular/core";
@Component({
templateUrl:"home.html"
})
export class HomePage implements OnInit {
public ionScroll;
public showButton = false;
public contentData = [];
constructor(public myElement: ElementRef) {}
ngOnInit() {
// Ionic scroll element
this.ionScroll = this.myElement.nativeElement.children[1].firstChild;
// On scroll function
this.ionScroll.addEventListener("scroll", () => {
if (this.ionScroll.scrollTop > window.innerHeight) {
this.showButton = true;
} else {
this.showButton = false;
}
});
// Content data
for (let i = 0; i < 301; i++) {
this.contentData.push(i);
}
}
// Scroll to top function
// Adapted from
scrollToTop(scrollDuration) {
let scrollStep = -this.ionScroll.scrollTop / (scrollDuration / 15);
let scrollInterval = setInterval( () => {
if ( this.ionScroll.scrollTop != 0 ) {
this.ionScroll.scrollTop = this.ionScroll.scrollTop + scrollStep;
} else {
clearInterval(scrollInterval);
}
}, 15);
}
}
完整组件Html
<ion-navbar primary *navbar>
<ion-title>
Ionic 2
</ion-title>
<button *ngIf="showButton" (click)="scrollToTop(1000)">Scroll Top</button>
</ion-navbar>
<ion-content class="has-header" #testElement>
<div padding style="text-align: center;">
<h1>Ionic 2 Test</h1>
<div *ngFor="let item of contentData">
test content-{{item}}
</div>
</div>
</ion-content>
从 adriancarriger
简化 scrollToTop()
import { Component, ViewChild } from '@angular/core';
import { Content } from 'ionic-angular';
@Component({...})
export class MyPage{
@ViewChild(Content) content: Content;
scrollToTop() {
this.content.scrollToTop();
}
}
来源:http://ionicframework.com/docs/v2/api/components/content/Content/
在 adriancarriger 代码的帮助下,我尝试了以下方法将 Div 元素设置为 Top 并且成功了。
下面是我的代码
Html
<div #Innholdtext >
<p> add your contents here to set scroll top </>
</div>
app.component.ts
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
export class app implements OnInit {
@ViewChild('Innholdtext') private hovedInnhold : ElementRef;
private scrollElement;
}
ngOnInit() {
this.scrollElement = this.hovedInnhold.nativeElement;
this.scrollElement.addEventListener("click", () =>{
this.hovedInnhold.nativeElement.scrollTop = 0
});
}
你可以试试这个。希望对您有所帮助
import { Component, ViewChild } from '@angular/core';
import { Content } from 'ionic-angular';
@Component({...})
export class MyPage{
@ViewChild(Content) content: Content;
scrollToTop() {
this.content.scrollToTop();
}
}
当您在组件内部有一个组件时,您可能无法在内部组件中获取内容。那就是说我必须获取上部元素并调用滚动。
在我的情况下,当转到下一张幻灯片时,我必须在下一张幻灯片的顶部。
const element = document.querySelector(".slide-zoom");
setTimeout(() => { if(element) element.scrollIntoView(true) }, 200);
大家好,我正在尝试添加实现以下内容的 "scroll to top button.":
1.Show 用户向下滚动时的按钮。 2.Hide 用户向上滚动时的按钮。 3.If 点击按钮然后滚动到顶部并隐藏按钮。 有什么正确的建议吗?
非常感谢
Plunker Demo
要完成这项工作,您需要:
- 创建一个将
scroll-content
元素滚动到顶部的函数 - 跟踪
scroll-content
的滚动位置
- 在滚动到顶部按钮上使用
*ngIf
以在scroll-content
达到特定阈值后有条件地显示。
滚动到顶部功能
我改编了 this SO answer 以应用于 scroll-content
元素
scrollToTop(scrollDuration) {
let scrollStep = -this.ionScroll.scrollTop / (scrollDuration / 15);
let scrollInterval = setInterval( () => {
if ( this.ionScroll.scrollTop != 0 ) {
this.ionScroll.scrollTop = this.ionScroll.scrollTop + scrollStep;
} else {
clearInterval(scrollInterval);
}
}, 15);
追踪scroll-content
位置
此示例使用 window 高度作为显示滚动到顶部按钮的阈值,如下所示:
this.ionScroll.addEventListener("scroll", () => {
if (this.ionScroll.scrollTop > window.innerHeight) {
this.showButton = true;
} else {
this.showButton = false;
}
});
按钮Html
<button *ngIf="showButton" (click)="scrollToTop(1000)">Scroll Top</button>
完整组件 Typescript
import { NavController } from 'ionic-angular/index';
import { Component, OnInit, ElementRef } from "@angular/core";
@Component({
templateUrl:"home.html"
})
export class HomePage implements OnInit {
public ionScroll;
public showButton = false;
public contentData = [];
constructor(public myElement: ElementRef) {}
ngOnInit() {
// Ionic scroll element
this.ionScroll = this.myElement.nativeElement.children[1].firstChild;
// On scroll function
this.ionScroll.addEventListener("scroll", () => {
if (this.ionScroll.scrollTop > window.innerHeight) {
this.showButton = true;
} else {
this.showButton = false;
}
});
// Content data
for (let i = 0; i < 301; i++) {
this.contentData.push(i);
}
}
// Scroll to top function
// Adapted from
scrollToTop(scrollDuration) {
let scrollStep = -this.ionScroll.scrollTop / (scrollDuration / 15);
let scrollInterval = setInterval( () => {
if ( this.ionScroll.scrollTop != 0 ) {
this.ionScroll.scrollTop = this.ionScroll.scrollTop + scrollStep;
} else {
clearInterval(scrollInterval);
}
}, 15);
}
}
完整组件Html
<ion-navbar primary *navbar>
<ion-title>
Ionic 2
</ion-title>
<button *ngIf="showButton" (click)="scrollToTop(1000)">Scroll Top</button>
</ion-navbar>
<ion-content class="has-header" #testElement>
<div padding style="text-align: center;">
<h1>Ionic 2 Test</h1>
<div *ngFor="let item of contentData">
test content-{{item}}
</div>
</div>
</ion-content>
从 adriancarriger
scrollToTop()
import { Component, ViewChild } from '@angular/core';
import { Content } from 'ionic-angular';
@Component({...})
export class MyPage{
@ViewChild(Content) content: Content;
scrollToTop() {
this.content.scrollToTop();
}
}
来源:http://ionicframework.com/docs/v2/api/components/content/Content/
在 adriancarriger 代码的帮助下,我尝试了以下方法将 Div 元素设置为 Top 并且成功了。 下面是我的代码
Html
<div #Innholdtext >
<p> add your contents here to set scroll top </>
</div>
app.component.ts
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
export class app implements OnInit {
@ViewChild('Innholdtext') private hovedInnhold : ElementRef;
private scrollElement;
}
ngOnInit() {
this.scrollElement = this.hovedInnhold.nativeElement;
this.scrollElement.addEventListener("click", () =>{
this.hovedInnhold.nativeElement.scrollTop = 0
});
}
你可以试试这个。希望对您有所帮助
import { Component, ViewChild } from '@angular/core';
import { Content } from 'ionic-angular';
@Component({...})
export class MyPage{
@ViewChild(Content) content: Content;
scrollToTop() {
this.content.scrollToTop();
}
}
当您在组件内部有一个组件时,您可能无法在内部组件中获取内容。那就是说我必须获取上部元素并调用滚动。
在我的情况下,当转到下一张幻灯片时,我必须在下一张幻灯片的顶部。
const element = document.querySelector(".slide-zoom");
setTimeout(() => { if(element) element.scrollIntoView(true) }, 200);