Go to Top of page on button click in Angular 2
想通过单击按钮返回页面顶部,当前我使用的以下代码不起作用:
HTML:
1 | <button md-raised-button class="md-raised md-primary" (click)="onEdit()">Edit</button> |
功能:
1 2 3 | onEdit(){ window.scrollTo(0,0); } |
1 2 3 | onEdit(){ document.body.scrollTop = document.documentElement.scrollTop = 0; } |
这是我的解决方案,部分基于w3schools的后退按钮示例。
html:
1 | <button (click)="topFunction()" id="myBtn" title="Go to top">Top</button> |
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /*-----------------------------Button-------------------*/ #myBtn { display: none; /* Hidden by default */ position: fixed; /* Fixed/sticky position */ bottom: 20px; /* Place the button at the bottom of the page */ right: 30px; /* Place the button 30px from the right */ z-index: 99; /* Make sure it does not overlap */ border: none; /* Remove borders */ outline: none; /* Remove outline */ background-color: red; /* Set a background color */ color: white; /* Text color */ cursor: pointer; /* Add a mouse pointer on hover */ padding: 15px; /* Some padding */ border-radius: 10px; /* Rounded corners */ font-size: 18px; /* Increase font size */ } #myBtn:hover { background-color: #555; /* Add a dark-grey background on hover */ } |
typescript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @HostListener("window:scroll", []) onWindowScroll() { this.scrollFunction(); } // When the user scrolls down 20px from the top of the document, show the button scrollFunction() { if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { document.getElementById("myBtn").style.display ="block"; } else { document.getElementById("myBtn").style.display ="none"; } } // When the user clicks on the button, scroll to the top of the document topFunction() { document.body.scrollTop = 0; // For Safari document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera } |
希望它对任何人都有帮助
我尝试在下面的代码中正常工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import { Inject } from '@angular/core'; @Component({ ... providers: [ { provide: Window, useValue: window } ], ... }) export class ProgressComponent implements OnInit { constructor( @Inject(Window) private window: Window, ) { } onEdit(){ this.window.document.getElementById('editSection').scrollIntoView(); } } |
正确的方法是使用DOCUMENT DI令牌
导入
1 2 | import { Component, Inject } from '@angular/core'; import { DOCUMENT } from '@angular/common'; |
注入文档
1 2 | constructor(@Inject(DOCUMENT) private dom: Document) { } |
然后您可以致电
1 2 | this.dom.body.scrollTop =0; this.dom.documentElement.scrollTop=0; |
这也适用于SSR(通用angular)
我正在使用angular6(这也适用于angular2)。这是我的示例代码。
sample.component.html
1 2 3 4 5 6 7 8 | <button type="button" class="btn btn-primary btn-sm" (click)="gotoSection()">Go to Section</button> <!-- content --> <!-- any content --> <!-- any content --> |
sample.component.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; @Component({ selector: 'app-sample', templateUrl: './sample.component.html' }) export class Sample { @ViewChild('sectionNeedToScroll') sectionNeedToScroll: ElementRef constructor() { } public gotoSection() { //this will provide smooth animation for the scroll this.sectionNeedToScroll.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' }) } } |
只需单击按钮即可使用
1 | document.body.scrollTop = 0; |
ngx-scrolltop区块上的新孩子
1 | ng add ngx-scrolltop |
解决此问题的小型Angular库:https://github.com/bartholomej/ngx-scrolltop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <!--Scroll to top--> <button (click)="scrollToTop()"> <i class="fa fa-chevron-up"> </button> import { Component, OnInit, Inject, HostListener } from '@angular/core'; import { DOCUMENT } from"@angular/platform-browser"; @Component({ selector: 'app-scroll-top', templateUrl: './scroll-top.component.html', styleUrls: ['./scroll-top.component.css'] }) export class ScrollTopComponent implements OnInit { windowScrolled: boolean; constructor(@Inject(DOCUMENT) private document: Document) {} @HostListener("window:scroll", []) onWindowScroll() { if (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop > 100) { this.windowScrolled = true; } else if (this.windowScrolled && window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop < 10) { this.windowScrolled = false; } } scrollToTop() { (function smoothscroll() { var currentScroll = document.documentElement.scrollTop || document.body.scrollTop; if (currentScroll > 0) { window.requestAnimationFrame(smoothscroll); window.scrollTo(0, currentScroll - (currentScroll / 8)); }enter code here })(); } ngOnInit() {} } |
为顶部元素分配一个ID。
例子
1 | <h1 id="top">TOP HERE |
在您的功能中:
1 2 3 | backToTop() { document.getElementById('top').scrollIntoView(); } |
在您的按钮中:
1 | <button (click)="backToTop()">Back to top</button> |
您可以使用以下代码:
angular
1 | <button md-raised-button class="md-raised md-primary" onclick="onEdit()">Edit</button> // button onclick |
JS:
1 2 3 | function onEdit() { // function onEdit window.scrollTo(0, 0); // very top } |