2013-01-15 14 views
13

Voglio fare l'inverso di quello che ho trovato finora. Sto impostando un sacco di altezze con js e voglio passare all'hashtag nell'URL dopo che la pagina è stata caricata. Sto indovinando questo è semplice, ma io non sto vedendo la risposta ovvia ... per un esempio, controllare qui ...Come si passa all'hashtag dopo il caricamento della pagina?

http://alavita.rizenclients.com/#story

Tentativo questo utilizzando il codice ...

$(window).load(function() { 
    var hashTag = window.location.hash; 
    window.location = '/' + hashTag; 
}); 

realtà non portarmi alla parte superiore della sezione con tag ...

+0

Ho finito per utilizzare il concatenamento di una funzione completa con yepnope. jQuery stava ottenendo il valore dell'offset di hasthtag prima che il contenuto venisse popolato. Ho appena dato un calcio in un mix del codice con cui voi ragazzi avete aiutato a completare. – brunam

risposta

23

Se si desidera semplicemente cambiare l'hash dopo caricamento della pagina:

window.onload = function (event) { 
    window.location.hash = "#my-new-hash"; 
}; 

Se si vuole navigare verso l'URL con il nuovo hash:

window.location.href = "http://website.com/#my-new-hash"; 

Se si desidera ascoltare per modifiche nell'hash dell'URL; puoi considerare di utilizzare l'evento DOM window.onhashchange.

window.onhashchange = function() { 
    if (location.hash === "#expected-hash") { 
     doSomething(); 
    } 
}; 

Ma non è ancora supportato da tutti i principali browser. Ora ha un ampio browser support. È inoltre possibile verificare le modifiche eseguendo il polling dello window.location.hash a intervalli di piccole dimensioni, ma anche questo non è molto efficiente.

Per una soluzione di cross-browser ; Vorrei suggerire Ben Alman's jQuery hashchange plugin che combina questi metodi e alcuni altri con un meccanismo di fallback.

EDIT: Dopo l'aggiornamento domanda, capisco che desidera che la pagina per scorrere fino a un segnalibro ?:

È possibile utilizzare Element.scrollTop o il metodo $.scrollTop() di jQuery.

$(document).ready(function (event) { 
    var yOffset = $("#my-element").offset().top; 
    $("body").scrollTop(yOffset); 
}); 

Vedere documentazione here.

0

si può solo impostare la posizione corrente:

window.location = 'http://alavita.rizenclients.com/#story'; 

O impostare l'hash (se non lo è già), quindi ricaricare:

window.location.hash = hashTag; 
window.location=window.location.href; 
+0

anche in esecuzione di questo codice: [code] $ (window) .load (function() { \t \t \t var = hashtag window.location.hash; \t \t \t window.location = '/' + hashtag; \t \t }); in realtà non mi porta in cima alla sezione taggata ... – brunam

+0

modificato la mia risposta per includere un altro metodo –

0

Hai cambiato la tua domanda.

Dai un'occhiata a questa soluzione. https://stackoverflow.com/a/2162174/973860 in modo da capire cosa sta succedendo e come implementare una soluzione cross browser.

AVVISO: Nella parte inferiore si parla di un plug-in jQuery che farà ciò di cui hai bisogno.

http://benalman.com/projects/jquery-hashchange-plugin/

Questo plugin vi permetterà di fare qualcosa di simile. Questo funzionerà per la tua pagina corrente. Ma potresti voler modificarlo per essere più robusto.

$(function(){ 

    // Bind the event. 
    $(window).hashchange(function(){ 
     // get the hash 
     var hash = window.location.hash; 
     // click for your animation 
     $('a[href=' + hash + ']').click(); 
    }) 

    // Trigger the event (useful on page load). 
    $(window).hashchange(); 

}); 
Problemi correlati