2013-04-17 1 views
0

J'ai une fonction qui ressemble essentiellement à ceci:Scrolling la fenêtre avec jquery ne parvient pas à animer lorsqu'elle est déclenchée par un hashchange dans Backbone

function scroll(scrollTop) { 
    $("body,html").animate({scrollTop: scrollTop}); 
} 

et dans les voies Backbone, je suis en train d'utiliser cette fonction pour faire défiler à une position sur une page, de nouveau, simplifié:

var Router = Backbone.Router.extend({ 
    routes: { 
    "": "index", 
    "foo": "foo" 
    }, 

    index: function() { 
    scroll(0); 
    }, 

    foo: function() { 
    scroll($("#foo").offset().top); 
    } 
}); 

Cela fonctionne bien sur la charge de la page (si le chargement «/foo »), en appelant la fonction manuellement ou en utilisant pushState (par opposition au fragment de hachage) des itinéraires .

Mais en utilisant les voies de fragments de hachage, l'animation échoue. La position du défilement change toujours, mais instantanément, sans animation.

est-il une solution pour cela?

+0

Est-il possible que vos itinéraires correspondent à l'identifiant des éléments de votre page? – Loamhoof

+0

@Loamhoof oui, en dehors de la route 'index' qui défile à 0, les autres trouvent effectivement un élément par id top' (I modifié le code en question pour refléter cela) et le défilement à son' offset().. Mais le simple fait de faire défiler jusqu'à 0 a le même problème. – numbers1311407

Répondre

2

Ce que vous décrivez est en fait le comportement du navigateur lors du changement du hashtag. Autrement dit, la navigation domain.com-domain.com#someId est comme demander au navigateur de « se concentrer » sur l'élément de la page qui est id someId. Donc, la fenêtre va se déplacer vers cet élément. Malheureusement, je ne connais pas de solution à ce problème.

Vous pouvez regarder cette discussion, j'ai trouvé lors de la recherche d'une solution possible: Modifying document.location.hash without page scrolling.

+0

Oui, c'est ça, et c'est évident maintenant que vous l'avez signalé. D'une manière ou d'une autre, j'utilise Backbone depuis des années et je n'ai jamais rencontré ça. Je suppose que mes dom ID et routes ont juste coïncidence jamais égalé. – numbers1311407

Questions connexes