Ancres douces

Lorsqu’on clique sur un lien qui mène vers une ancre dans la même page et que le navigateur « saute » brutalement jusqu’à cette ancre, le visiteur perd la notion de l’endroit où il se trouve et ne visualise pas la structure globale de la page. En termes d’ergonomie c’est assez mauvais, et on attend le navigateur qui trouvera la solution.

Dans l’immédiat, chacun peut améliorer cela sur son propre site SPIP. Le plugin Ancres douces fait une chose (et une seule) : il transforme toutes les ancres (<a href="#xxx">) des pages en « ancres douces », où le navigateur fait défiler doucement la page jusqu’à l’ancre. Ainsi le lecteur sait en permanence où il se trouve dans la page, et peut plus facilement remonter, etc.

On peut voir ce plugin en action sur le site des blogs du Monde diplo (cliquer sur « XX commentaires » ou sur les appels de note, par exemple).

Ce plugin est une intégration à SPIP de deux scripts jQuery d’Ariel Flesler, avec lesquels il est possible de faire plein d’autres jolis scrolls (voir les démos) :
— localScroll
— scrollTo

Restreindre ancres_douces à certains blocs

Si vous utilisez d’autres scripts javascripts utilisant aussi les ancres (par exemple un slider jquery), il est possible que des interférences se produisent avec ancres_douces.

Pour éviter ces interférences, il est nécessaire d’indiquer sur quel bloc ou quels types de blocs on veut restreindre le fonctionnement de ancres_douces.

Pour cela, on doit définir dans mes_options.php la constante « CONTEXTE_ANCRES_DOUCES ».

Exemple :
-  Pour restreindre au bloc d’id contenu (convient sur un grand nombre de squelettes spip ) :

define ('CONTEXTE_ANCRES_DOUCES','#contenu'); 


-  pour restreindre à tous les éléments de classe « ancres_douces »

define ('CONTEXTE_ANCRES_DOUCES','.ancres_douces'); 

Bugs connus :
-  fonctionne mal avec Opera. (corrigé en 1.2)

À noter, le plugin Ancres douces est aussi intégré sous forme d’une lame du Couteau suisse.

Discussion

6 discussions

  • 1

    Testé en Spip 4.2.0,
    RAS, tout semble fonctionner // Compatible 4.2

    Répondre à ce message

  • Bonjour,

    Maintenant qu’on peut faire ça avec une ligne de CSS, est-ce qu’il serait pertinent de modifier ce plugin pour ne plus avoir de javascript ?

    Un peu de doc : https://blog.mayank.co/better-scrolling-through-modern-css

    @media (prefers-reduced-motion: no-preference) {
    	html {
    		scroll-behavior: smooth;
    	}
    }

    Répondre à ce message

  • 8

    Dans le cas où il y a des conflits javascript, je trouve plus simple de prendre le problème à l’envers : garder les ancres douces partout, et désactiver sur certains blocs ponctuellement.

    Dans ce cas, je rajoute la classe « no-ancres-douces » là où ça pose poroblème, et dans mes_options.php :

    <code>define ('ANCRES_DOUCES_CONTEXTE',':not(.no_ancres_douces)');</code>
    • Oups, j’ai parlé trop vite, ça ne fonctionne pas ainsi. Et la bonne valeur c’est CONTEXTE_ANCRES_DOUCES.

    • C’est corrigé dans la doc...

    • Bonsoir,

      Je déterre cette option qui ne fonctionne pas chez moi :

      define ('CONTEXTE_ANCRES_DOUCES',':not(.no_ancres_douces)');

      alors que :

      define ('CONTEXTE_ANCRES_DOUCES','.ancres_douces');

      fonctionne !

      Il n’y a rien a modifier dans Ancres Douces ?

      Merci.
      François.

    • Bonjour,

      De mon côté je n’arrive pas à faire fonctionner le define avec le sélecteur :not() comme tu l’indiques : tu as modifié autre chose ?

      SPIP et Ancres Douces à jours.

      Merci,
      françois

    • Non je n’étais pas arrivé à faire fonctionner ainsi, et depuis je n’ai pas trop regardé.
      Nb : maintenant c’est de base dans les navigateurs récents :

      html {
        scroll-behavior: smooth;
      }
    • Merci tcharlss, mais c’est confidentiel quand même :
      https://caniuse.com/#feat=css-scroll-behavior

      Je vais regarder du côté de jQuery.localScroll.

    • Et bien il y a la variable filter qui permet de filtrer les sélecteurs que l’on veut exclure :

      $.localScroll.defaults.filter = ':not(.no_ancres_douces)';

      mais il faut applique le sélecteur directement sur les href à exclure et pas uniquement sur le conteneur !

      françois

    • D’après canisuse, il n’y a plus que sur safari que scroll-behavior: smooth; n’est pas défini

    Répondre à ce message

  • Bonjour,
    j’utilise le plugin avec un « menu » a gauche " et les ancres dans un div sur la droite avec overflow auto
    si je clique et que le déplacement doit être vers le bas cela décale
    si je clique et que le déplacement doit être vers le haut ... cela marche nikel

    avez vous une idée du pb ?

    merci

    Répondre à ce message

  • Salut,

    pour un plugin, je cherche à désactiver le hash dans l’url.

    J’arrive bien à changer le événement déclencheur par défaut (defaults.event) mais pas l’apparition du hash.

    $( window ).load(function() {
       $.localScroll.defaults.event = 'mouseover';
       $.localScroll.defaults.hash = false;
    });

    L’option est en dur dans le pipeline, ça veut dire qu’on ne peut pas la surcharger ?
    Ou alors, comment désactiver le hash uniquement sur certains liens ?

    Merci

    Répondre à ce message

  • Juste une remarque : 2 versions de ce plugins s’installent en parallèle au lieu d’être remplacées :
    1.5.1 SVN [115158]
    1.3 SVN [43216]

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom