Je ne suis complètement votre question, cependant, voici comment je défiler en haut de la page sur chaque navigation. Peut-être que cela vous aide.
J'ai une fonction de défilement (smoothScrollReset
) qui obtient un élément (peut être tous les éléments) et défile à cet élément basé sur une fonction donnée (par exemple linearTween()
, vous pouvez modifier le comportement de défilement en échangeant celui-ci). L'élément que je défile est un conteneur sur la page. Ensuite, j'ajoute un pas de pipeline de rendu de post au routeur Aurelia. Tous ensemble:
Ajout de l'étape de pipeline:
...
let appRouterConfig = config => {
config.addPipelineStep('postRender', ScrollToTopStep);
};
this.router.configure(appRouterConfig);
...
L'étape de pipeline lui-même:
La fonction de défilement:
export function smoothScrollReset(element) {
if (!element) {
return;
}
const duration = 200;
const scrollFrom = element.scrollTop;
const diff = -scrollFrom;
let startTime = null;
let lastYOffset;
let scrollLoop = (currentTime) => {
let currentYOffset = element.scrollTop;
if (!startTime) {
startTime = currentTime - 1;
}
const timeElapsed = currentTime - startTime;
if (lastYOffset) {
if ((diff > 0 && lastYOffset > currentYOffset) ||
(diff < 0 && lastYOffset < currentYOffset)) {
return;
}
}
lastYOffset = currentYOffset;
element.scrollTop = linearTween(timeElapsed, scrollFrom, diff, duration);
if (timeElapsed < duration) {
window.requestAnimationFrame(scrollLoop);
} else {
element.scrollTop = 0;
}
};
window.requestAnimationFrame(scrollLoop);
}
function linearTween(t, b, c, d) {
return c * t/d + b;
}
Est-ce que vous cherchez? Votre question est assez floue. Aussi, qu'avez-vous déjà essayé? http://aurelia.io/hub.html#/doc/article/aurelia/templating/latest/templating-html-behaviors-introduction/3 – peinearydevelopment
Il suffit de répondre à la dernière question que vous avez posée, 'window' est une propriété globale dans la navigateur, de sorte que vous n'avez pas besoin de l'injecter. C'est juste là pour utiliser. –