[英]How to make onclick action(scroll down 150px) to specific class element that has no id using javascript?
[英]Javascript scroll to specific element by ID
我有一個帶有 4 個選項卡的菜單欄,當我按下每個選項卡時,它應該向下滾動到同一頁面上的相應類別(特定 ID)。 這是菜單的代碼:
template: `
<div class="action-container">
<div class="btn-group quick-navigation custom-group" role="group">
<a *ngFor="let section of sections" [scrollTo]="section.id" (click)="active = section.id"
class="btn btn-secondary" [class.active]="section.id == active">{{section.name}}</a>
</div>
</div>
`,
這是滾動指令:
@Directive({
selector: '[scrollTo]'
})
export class ScrollToDirective {
@Input() scrollTo: string;
@HostListener('click', ['$event']) onClick(e) {
console.log(this.scrollTo);
console.log($(`#${this.scrollTo}`).offset().top - 150);
$('html, body').animate({
scrollTop: $(`#${this.scrollTo}`).offset().top - 150
}, 500);
}
}
問題是某個特定元素的offset().top-150在多次切換tab后會發生變化,第一次會重定向到正確的元素,但之后頁面會隨機跳轉到不同的元素。
我附上了控制台的打印屏幕。
有什么建議? 謝謝!
您不必計算任何值來做您想做的事情,也根本不必使用 JavaScript。 至少,因為您不想要平滑滾動。
您可以輕松滾動到任何帶有 id 設置href
屬性的元素:
<a href="#my_id" id="my_link">Click me to scroll down</a>
...
<section id="my_id">...</section>
好的,根據您的評論,這樣做時與 angular 的 Router 存在沖突,因此您可以使用一點 JavaScript 來解決問題:
document.getElementById("my_link").addEventListener("click",(e)=>{
e.preventDefault();
document.querySelector(e.currentTarget.href).scrollIntoView();
});
快速回答:
element = document.getElementById("message");
element.scrollIntoView();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.