Ciao, no, non viene ignorato, più precisamente quella funzione che hai richiamato al click viene eseguita poco prima che avvenga l'azione di default del click su quel link. In altre parole, l'effetto di quello script avviene istantaneamente, nel momento in cui fai click sul link, quindi la pagina scrolla di 86px anche se non c'è alcun effetto visivo perché subito dopo avviene (per ultima) l'azione di default che riporta lo scroll al suo regolare valore, relativo alla posizione del target di quell'ancora.Originariamente inviata da Gas75
A conti fatti, la pagina va a posizionarsi esattamente sul relativo target, secondo l'effetto dell'ultima azione (quella di default). Il codice quindi non è "ignorato" ma il suo effetto è "annullato" (se così possiamo dire) dall'azione di default.
Quello che non va è il procedimento delle azioni eseguito esattamente al contrario rispetto a come ti aspettavi.Originariamente inviata da Gas75
Il "return false" impedisce che sia eseguita l'azione di default ma ovviamente non è sufficiente a risolvere il problema perché in quel modo avviene, sì, lo scorrimento di 86px ma senza considerare il valore relativo alla posizione del target (che chiaramente è necessario per determinare il valore finale), il quale normalmente verrebbe determinato dall'azione di default.Originariamente inviata da cavicchiandrea
In questo caso otterresti lo stesso effetto di un button in quanto questo non possiede ovviamente un'azione di default che determina lo scorrimento della pagina; avrai quindi solo uno scorrimento di 86px rispetto alla posizione attuale.
PS: a prescindere dal fatto che così non funziona, il valore di scrollBy dovrebbe essere negativo (cioè -86), non positivo, perché ovviamente dovrebbe essere sottratto al normale valore dato dallo scorrimento di default.
EDIT:
aggiungo una possibile soluzione. Tieni conto che preferisco evitare in tutti i modi gli interventi invasivi che vanno a pasticciare il codice HTML, per cui uso un po' di jQuery (dal momento che è presente sul tuo sito, da quel che ho visto) in modo da applicare un gestore per l'evento click direttamente da script, lasciando puliti i tag <a>, quindi non hai chiaramente bisogno di applicare l'attributo onclick.
Puoi mettere questo script alla fine del body, ovviamente dopo l'inclusione di jQuery:
questo non fa altro che applicare un gestore per tutti i link con href che inizia per "#" (cioè le ancore interne in cui viene definito l'hash a cui puntare). L'azione di default è chiaramente annullata ma lo scorrimento viene forzato dallo script applicando il location.hash con il relativo hash del link, quindi lo scorrimento viene aggiustato con scrollBy.codice:$('a[href^="#"]').click(function(e){ scrollOn(this.hash); e.preventDefault(); }); function scrollOn(a){ location.hash = a; window.scrollBy(0, -86); } $(function(){if (location.hash) scrollOn(location.hash);});
Ho aggiunto anche un controllo al caricamento della pagina, in modo che se si tratta di un indirizzo con hash, avvenga quella stessa azione per aggiustare lo scorrimento... cosa che col solo onclick non potevi effettuare.
Ho fatto poche prove, magari fai tu gli opportuni test per verificare se sui vari browser/dispositivi, funzioni come vorresti.



Rispondi quotando