Empêcher le navigateur de scroller vers une ancre
Empêcher le navigateur de scroller vers une ancre
Bonjour,
je suis actuellement confronté à un problème que je n'arrive pas à résoudre :
afin de garder la possibilité d'utiliser l'historique des navigateurs tout en exécutant de l'Ajax, j'utilise les ancres pour modifier la barre d'adresse.
Le problème est donc le suivant : lorsque le navigateur change la barre d'adresse en ajoutant une ancre, il remonte la page automatiquement en haut, si l'ancre n'existe pas réellement.
Par exemple j'appelle http://www.test.com/script.html, puis une fonction Javascript appelle l'URL http://www.test.com/script.html#couleur:bleu
Aucun élément d'id "couleur:bleu" n'existe, le navigateur remonte la page au début.
J'ai d'abord pensé à utiliser une astuce avec la fonction scrollTo de Scriptaculous, qui permet de naviguer de façon fluide vers une ancre (au lieu de sauter vers celle-ci), puis de lui mettre une durée d'exécution énorme, qui donne l'impression que la page ne bouge pas. Ça fonctionne un peu trop bien, car la page ne bouge pas, mais il est impossible de scroller ensuite.
J'ai ensuite pensé à utiliser l'option "offset" de la fonction scrollTo, pour faire revenir le navigateur au pixel où à cliqué l'utilisateur. Mais ça donne une désagréable impression que la page remonte puis redescend en une fraction de seconde.
___________
Y-a-t'il un moyen pour empêcher le navigateur de scroller vers le haut de la page, si l'ancre n'existe pas ?
Merci d'avance !
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
je suis actuellement confronté à un problème que je n'arrive pas à résoudre :
afin de garder la possibilité d'utiliser l'historique des navigateurs tout en exécutant de l'Ajax, j'utilise les ancres pour modifier la barre d'adresse.
Le problème est donc le suivant : lorsque le navigateur change la barre d'adresse en ajoutant une ancre, il remonte la page automatiquement en haut, si l'ancre n'existe pas réellement.
Par exemple j'appelle http://www.test.com/script.html, puis une fonction Javascript appelle l'URL http://www.test.com/script.html#couleur:bleu
Aucun élément d'id "couleur:bleu" n'existe, le navigateur remonte la page au début.
J'ai d'abord pensé à utiliser une astuce avec la fonction scrollTo de Scriptaculous, qui permet de naviguer de façon fluide vers une ancre (au lieu de sauter vers celle-ci), puis de lui mettre une durée d'exécution énorme, qui donne l'impression que la page ne bouge pas. Ça fonctionne un peu trop bien, car la page ne bouge pas, mais il est impossible de scroller ensuite.
J'ai ensuite pensé à utiliser l'option "offset" de la fonction scrollTo, pour faire revenir le navigateur au pixel où à cliqué l'utilisateur. Mais ça donne une désagréable impression que la page remonte puis redescend en une fraction de seconde.
___________
Y-a-t'il un moyen pour empêcher le navigateur de scroller vers le haut de la page, si l'ancre n'existe pas ?
Merci d'avance !
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Tu as regardé http://www.deviantart.com/ ? Il ne me semble pas qu'on remonte en haut (mais je ne suis pas 100% sur)
D'habitude j'y accède depuis chez moi, avec un plus grand écran où tout tient dans un seul écran... effectivement depuis un écran plus petit on remonte.
En fait je pensais par exemple aux galleries des utilisateurs, p.ex au bol : http://hibbary.deviantart.com/gallery/#_featured--2
On remonte mais pas tout en haut. Mais l'ancre doit probablement exister.
Pourquoi ne pas créer ces ancres ? Ca ne doit pas être très compliqué en javascript, avant d'appeler l'ajax...
En fait je pensais par exemple aux galleries des utilisateurs, p.ex au bol : http://hibbary.deviantart.com/gallery/#_featured--2
On remonte mais pas tout en haut. Mais l'ancre doit probablement exister.
Pourquoi ne pas créer ces ancres ? Ca ne doit pas être très compliqué en javascript, avant d'appeler l'ajax...
Bon, à force de me creuser la tête, j'ai trouvé une solution.
Déjà il faut savoir que le problème de retour au haut de la page ne se pose pas avec IE6 et 7 (Internet Explorer semble se foutre que l'on change l'url de toute façon).
La correction n'est donc à effectuer que pour les navigateurs Webkit (Safari, Chrome, Opera) et Gecko (Firefox).
Le principe c'est de faire flotter une div invisible en permanence en haut de l'écran. Lorsque l'url est modifié, on enregistre la position de cette div, puis on demande à la page de scroller à l'ancienne position de la div.
Avec cette méthode on retourne bien à la position d'origine, mais on peu observer un léger clignotement (vu que la page remonte puis redescend en une fraction de seconde). C'est le mieux que j'ai réussi à faire malheureusement, et ce "clignotement" est presque indiscernable sur Firefox et Safari, et carrément inexistant sur Opera et Chrome.
L'exemple : http://conradsonblog.appspot.com/test/ancres_test.html
Exemple de code :
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Déjà il faut savoir que le problème de retour au haut de la page ne se pose pas avec IE6 et 7 (Internet Explorer semble se foutre que l'on change l'url de toute façon).
La correction n'est donc à effectuer que pour les navigateurs Webkit (Safari, Chrome, Opera) et Gecko (Firefox).
Le principe c'est de faire flotter une div invisible en permanence en haut de l'écran. Lorsque l'url est modifié, on enregistre la position de cette div, puis on demande à la page de scroller à l'ancienne position de la div.
Avec cette méthode on retourne bien à la position d'origine, mais on peu observer un léger clignotement (vu que la page remonte puis redescend en une fraction de seconde). C'est le mieux que j'ai réussi à faire malheureusement, et ce "clignotement" est presque indiscernable sur Firefox et Safari, et carrément inexistant sur Opera et Chrome.
L'exemple : http://conradsonblog.appspot.com/test/ancres_test.html
Exemple de code :
Code : Tout sélectionner
<div id="hash_position" style="position:absolute;"></div>
<script type="text/javascript">
// pour garder une div toujours en haut de la page, si on est pas sur IE
if (!document.all) { setInterval("positionHash()",100); }
function positionHash(){
var hashTop = pageYOffset;
hash_position.style.top = hashTop+"px";
}
// on modifie le "hash", puis on repositionne la fenêtre
window.location.hash = color_line;
current_hash = window.location.hash;
if (!document.all) {
window.scrollBy(0,ypox);
}
</script>
Salut,
@+
--
Pierre
Message envoyé avec : Opera/10.00 (Windows NT 5.1; U; fr) Presto/2.2.0
Opera n'utilise pas le moteur de rendu Webkit. Il utilise son propre Presto "fait maison" dont le nom figure désormais dans le User-Agent de la bête.La correction n'est donc à effectuer que pour les navigateurs Webkit (Safari, Chrome, Opera)
@+
--
Pierre
Message envoyé avec : Opera/10.00 (Windows NT 5.1; U; fr) Presto/2.2.0
Ca c'est malin comme technique !

On dirait en effet que ça remonte en haut. Je pense qu'il s'agit d'un bug (vu mes connaissances en javascript, je n'en suis pas sûr). Étant donné que tu as un exemple minimum, ça pourrait être utile de le soumettre sur Bugzilla (vérifie qu'il n'existe pas déjà).Conrad a écrit :Avec cette méthode on retourne bien à la position d'origine, mais on peu observer un léger clignotement (vu que la page remonte puis redescend en une fraction de seconde).
c'est assez satisfaisant je trouve on ne vois que aller en bas 1/5 de seconde à peine
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
https://addons.mozilla.org/en-US/firefox/addon/113517 mon theme en ligne compatilble ff2et 3
la page à disparu et je me demander comment faire pour faire des ancre comme celle-ci
je croyais que les ancre amené à une partie de la page et la celon #blue #red
on avait un e page différente
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
je croyais que les ancre amené à une partie de la page et la celon #blue #red
on avait un e page différente
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
https://addons.mozilla.org/en-US/firefox/addon/113517 mon theme en ligne compatilble ff2et 3
On a la même page, simplement l'ancre provoque un appel ajax qui fait que son contenu est changé dynamiquement !bormat a écrit :la page à disparu et je me demander comment faire pour faire des ancre comme celle-ci
je croyais que les ancre amené à une partie de la page et la celon #blue #red
on avait un e page différente
salut merci ,ok c'est de l'ajax je ne suis pas encore à làcalimo a écrit :On a la même page, simplement l'ancre provoque un appel ajax qui fait que son contenu est changé dynamiquement !bormat a écrit :la page à disparu et je me demander comment faire pour faire des ancre comme celle-ci
je croyais que les ancre amené à une partie de la page et la celon #blue #red
on avait un e page différente
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
https://addons.mozilla.org/en-US/firefox/addon/113517 mon theme en ligne compatilble ff2et 3
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités