angular - Oprirea evenimentului de derulare după funcția typescript
Este posibil să se prevină orice eveniment de derulare suplimentar după o funcție.
Aș dori să creez un efect în care poți să derulezi în jos pe un site și, dacă ești la capătul acestui site, poți derula mai departe, dar atunci va apărea un site nou din stânga - ca și cum ai derula spre stânga. Această pagină nouă apare cu o animație, așa că nu vreau să o declanșez direct dacă este atins sfârșitul paginii.
Setez un timeout, în măsura în care ajungi la fund:
this.timeoutUnitBottom = setTimeout(() => this.unitBottom = true, 1000);
și animația se va declanșa doar dacă this.unitBottom==true. Deci derulezi până jos și apoi după 1 secundă poți derula din nou și următorul site va apărea din stânga.
Problema mea: Dacă derulezi ca mine pe un Mac, evenimentul tău de derulare va continua chiar dacă nu atingi touchpad-ul. Acest lucru generează în mod normal o derulare lină pe pagini obișnuite, dar aici se poate întâmpla să derulezi până jos, să se declanșeze setTimeout și evenimentul de derulare să continue să se declanșeze după acel secundă.
Deci: Este posibil să oprești evenimentul de derulare în curs pe un Mac după ce ridici degetele (sau chiar pe orice alt computer, nu cunosc acele mecanici)
Aceasta ar putea fi o problemă insolubilă, pentru că în mod normal nu poți schimba intrarea computerului, dar poate unii dintre voi ați avea o idee.
Cu sinceritate, Sam
EDITEAZĂ
Cred că toți oamenii care au răspuns la întrebarea mea nu au înțeles că am nevoie de evenimentul de scroll și nu îl pot dezactiva pur și simplu. Singurul lucru care a ajutat a fost comentariul de sub întrebarea mea.
Răspuns #1
Poți asculta evenimentul de derulare folosind addEventListener. În această funcție poți monitoriza poziția window.scrollY. Odată ce ajungi la o anumită poziție Y, poți dezactiva temporar bara de derulare adăugând overflow: hidden; documentului (sau elementului tău container).
Exemplu :
window.addEventListener('scroll', function(e) {
if (window.scrollY >= 200) {
document.documentElement.style.overflow = 'hidden';
}
});
Răspunsul #2
Nu poți dezactiva evenimentele de derulare. Poți, însă, să dezactivezi acțiunile care provoacă derularea. În opinia mea, în loc să folosești mai mulți ascultători de evenimente așa cum este menționat aici, aș sugera următoarea soluție: utilizatorul derulează, dar tu manipulezi evenimentul pentru a rămâne în aceeași poziție și, când vrei să reactivezi derularea, suprascrii window.onscroll cu o funcție goală.
disableScroll() {
// Get the current page scroll position
scrollTop = window.pageYOffset || document.documentElement.scrollTop;
scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
// if any scroll is attempted, set this to the previous value
window.onscroll = function() {
window.scrollTo(scrollLeft, scrollTop);
};
}
enableScroll() {
window.onscroll = function() {};
}
