2011-03-31 4 views
0

Je le balisage suivantdéfilement lisse HTML signet

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Blah</title> 
    </head> 
    <body> 
     <header id='navigation'> 
      <nav> 
       <a rel='bookmark' href='#introduction'>Home</a> 
      </nav> 
     </header> 
     <section id='content'> 
      <section id='introduction'> 
       <header> 
        <h1>Welcome</h1> 
        <a href='#navigation'>Back to top></a> 
       </header> 
      </section> 
     </section> 
    </body> 
</html> 

Vous pouvez cliquer sur Home et accéder à la section introduction avec un signet. Vous pouvez ensuite revenir au navigation en cliquant sur Back to top.

Cela fonctionnera dans tous les navigateurs. Ce que je veux faire est d'ajouter un écouteur javascript d'une façon ou d'une autre de sorte que si Javascript est activé sur le navigateur, il écoute les signets et défile en douceur vers le signet. En pensant à haute voix, je pourrais ajouter un écouteur onchange à la barre d'adresse, analyser l'emplacement et vérifier quoi que ce soit après un #. Je pourrais obtenir l'élément id du texte après ce caractère et implémenter un algorithme de défilement lisse? Je ne pense pas que cela annulerait le défilement UA.

Je pourrais aussi analyser les DOM pour les liens qui contiennent # liens et ajouter javascript onclick smoothScoll(bookmark_name) événements et de supprimer le signet de sorte que le lien sera juste '#' alors dans le smoothScroll faire le défilement et l'ajouter à la barre d'adresse après le # .

Je voudrais apprendre à le faire avec javascript et non jQuery.

N'importe qui a eu des idées pour le faire. Je veux laisser le HTML tel quel et ajouter des événements javascript dans mon initPage() ce qui signifie que je sais javascript est activé.

Merci

Matt

+0

Ceci est simple si vous utilisez jQuery.Avez-vous besoin d'une réponse non-jQuery? –

+0

Je préfèrerais juste comprendre comment manipuler le DOM de cette façon car je voudrais utiliser l'API HTML5 History et me permettre une personnalisation plus serrée de mon code JS pour le site que je suis en train de faire. Je vais comprendre ce week-end. –

Répondre

1

Vous pouvez ajouter un écouteur de clic sur vos a#href éléments, et faire en sorte que le clic retourne faux, de cette façon vous nier le défilement UA. Après cela, vous devrez manuellement faire défiler ou animer la propriété de défilement pour correspondre à offsetTop du lien.

Voici un violon js utilisant jQuery pour démarrer: http://jsfiddle.net/ZtbVQ/1/. Vous n'avez qu'à traduire les appels jQuery aux appels js purs.

+0

Ok, je vais jeter un oeil à ce que fait jQuery. –

0

http://demos.flesler.com/jquery/scrollTo/

Avec ce plugin, vous pourrez facilement défiler Débordés éléments, et lui-même écran . Il vous donne accès à de nombreuses options différentes pour personnaliser et de diverses façons de spécifier où faire défiler .