GH GambleHub

Menus contextuels et actions rapides

1) Objet et champ d'application

Les menus contextuels et les actions rapides raccourcissent le chemin des opérations fréquemment utilisées :
  • Actions locales sur l'objet (carte, ligne de tableau, coefficient).
  • Actions par lots sur la sélection.
  • Options cachées mais non critiques (mineures).
  • Règle : Ne pas cacher les actions critiques et primaires uniquement dans le menu contextuel.

2) Déclencheurs et variantes

Right-click/Shift + F10/Menu key est un classique contextuel.
Icon button (kebab '⋮', meatballs '...', context) - universel pour tach/desktop.
Long-press (400-600 ms) est l'équivalent mobile de right-click.
Commande palette (⇧⌘P/Ctrl + K) : Commandes rapides globales avec recherche.
Swipe-reveal (listes iOS/Android) - ouvre un certain nombre de shortcats rapides.

Recommandation : fournir au moins deux façons d'appeler (icône + clic/touche contextuelle).


3) Contenu et priorité

Les 1 à 3 premiers points sont des actions fréquentes ; Puis le séparateur ; ensuite - moins utilisés.
Destructeurs - à la fin, marqués d'une couleur/icône (et souvent - par confirmation/undo).
La formulation est verbe + objet (« Ajouter aux favoris », « Copier l'ID »).
Le label ne ≠ qu'une icône : l'icône est un amplificateur, pas un remplacement de texte.


4) Groupement et état

Séparateurs pour blocs logiques (affichage, édition, admin, dangereux).
Состояния: `disabled`, `checked` (`menuitemcheckbox`/`menuitemradio`), `destructive`.
Nous ne montrons pas inaccessibles par rôle si cela est confus ; alternativement - nous montrons comme 'disabled' avec un indice de cause.


5) Disponibilité (A11y)

Conteneur : 'role =' menu ', éléments :' role = 'menuitem '/' menuitemcheckbox '/' menuitemradio'.
Roving tabindex : le seul' tabindex = » 0 » sur l'élément courant, les autres' -1 '.
Flèches ↑↓ - déplacement, →/← - entrée/sortie du sous-menu. Enter/Space - activation, Esc - fermer.
Typeahead : l'impression de la première lettre transfère le focus sur le point.
L'anneau de focalisation est visible ; le contraste du texte et des icônes ≥ AA.
Pour le bouton icône, utilisez 'aria-haspopup =' menu 'et'aria-expanded '.

Exemple de marquage :
html
<button id="more" aria-haspopup="menu" aria-expanded="false" aria-controls="menu-1">Еще</button>
<ul id="menu-1" role="menu" aria-labelledby="more" hidden>
<li role="menuitem" tabindex="0">Открыть</li>
<li role="menuitem">Скопировать ссылку</li>
<li role="menuitemcheckbox" aria-checked="true">В избранном</li>
<li role="menuitem" data-danger="true">Удалить</li>
</ul>
Navigation (schéma roving tabindex) :
js const menu = document.getElementById('menu-1');
menu.addEventListener('keydown', e=>{
const items=[...menu.querySelectorAll('[role^="menuitem"]')];
let i=items.findIndex(n=>n.tabIndex===0);
if(e.key==='ArrowDown'){ items[i].tabIndex=-1; items[(i+1)%items.length].tabIndex=0; items[(i+1)%items.length].focus(); e.preventDefault(); }
if(e.key==='ArrowUp'){ items[i].tabIndex=-1; items[(i-1+items.length)%items.length].tabIndex=0; items[(i-1+items.length)%items.length].focus(); e.preventDefault(); }
if(e.key==='Escape'){ menu.hidden=true; document.getElementById('more').focus(); }
});

6) Positionnement et performance

Ouvrir le menu à la source (clic-point/icône), décalage 4-8 px ; Regardez les bords de l'écran (flip/shift).
Portail/calque au-dessus ('z-index') avec capture de clic à l'extérieur.
Rendez paresseusement, recyclez la liste dans les menus longs (pas de virtualisation nécessaire, mais éviter des centaines d'articles).
Animations uniquement 'opacity/bou', durée 140-200 ms (out plus rapide : 100-160 ms).
Ouvrez le sous-menu par 'ArrowRight' et hover avec un retard de 80-120 ms (anti-flicker).


7) Modèles mobiles

Long-press avec haptique ; timing 450 ± 100 ms.
Bottom sheet en tant que forme de menu contextuel (thumb-reachable).
Swipe actions dans les listes : à gauche, « archives/favoris », à droite, « supprimer » (confirmation/non).
Zones de clic ≥ 44 × 44, signatures brèves, icônes 20-24 px.


8) Confirmations, undo et sécurité

Actions destructives : Soit une deuxième confirmation (modal/confirm pattern), soit un undo de 5 à 10 s.
Financier/risqué - à travers une confirmation explicite avec un contexte de conséquences.
Montrez la raison de 'disabled' (« Droits insuffisants », « Limite atteinte »).


9) Actions rapides sans menu

Inline-shortkates dans la ligne (icônes « », « », « ⋯ »).
Hover-reveal (desktop) : montre les actions au pointage, mais laisse aussi un déclencheur explicite.
Commande palette : recherche par action, raccourcis clavier dans les conseils (« ⌘S », « Ctrl + Enter »).


10) Copywriting et icônes

Verbe + objet, 2-3 mots.
Commencez par l'action (« Supprimer l'enregistrement »...), pas par le nom (« Supprimer l'enregistrement »).
Des icônes d'un ensemble unique ; utilisez les mêmes pictogrammes pour les mêmes actions sur l'ensemble du produit.
Conseils explicatifs (« title »/tooltip) pour les points ambigus.


11) Télémétrie et expérimentation

CTR par point, médiane du temps entre l'ouverture et le clic, fréquence des écarts/undo.
Nombre de misclick's (destructeurs → annulés).
A/B : ordre et regroupement des points, présence de shortcats rapides dans la liste.
Les logs de points « invisibles » (personne n'utilise) sont des candidats à la suppression/transfert.


12) Tokens de système de conception (exemple)

json
{
"menu": {
"minWidth": 208,
"itemHeight": 36,
"gap": 4,
"padding": 8,
"radius": 12,
"elev": 8,
"anim": { "inMs": 180, "outMs": 120, "ease": "cubic-bezier(0.2,0,0.2,1)" }
},
"swipe": { "revealThresholdPx": 56, "confirmDestructive": true }
}
Presets CSS :
css
.menu{min-width:208px;padding:8px;border-radius:12px;box-shadow:var(--elev-3);background:var(--bg-elevated)}
.menu [role^="menuitem"]{height:36px;padding:0 12px;display:flex;gap:8px;align-items:center;border-radius:10px}
.menu [role^="menuitem"]:hover,
.menu [role^="menuitem"][tabindex="0"]{background:var(--bg-hover)}
.menu [data-danger="true"]{color:var(--role-danger)}

13) Modèles par composant

Cartes/tuiles : icône '⋯' en haut à droite ; sur le hover - montré, sur la tache - toujours visible.
Lignes du tableau : '⋯' dans la dernière colonne ; dans le cas d'une sélection multiple, la barre d'actions par lots est supérieure/inférieure.
Listes de chat/notifications : swipe-actions (archive/lu/supprimé) avec undo.
Galeries de médias : tap long → mode multi-sélection + barre d'action inférieure.


14) Spécificité de iGaming

Mise rapide (quick bet) : Dans le menu contextuel du coefficient, « Mettre X », « Ajouter au coupon », « S'abonner à la modification du coefficient ». Confirmation/non obligatoire.
Favoris/abonnements : « Ajouter un fournisseur/jouer à favoris », « S'abonner à un tournoi ».
Cache-out : Avec confirmation en ligne et montant actuel ; disponible uniquement sur statut de marché.
Modération/reports : « Se plaindre », « Bloquer le chat » - sécurisés, visibles par les rôles.
Jeu responsable : « Fixer une limite », « Pause 24h » - sans couleurs agressives, avec une description claire des conséquences.


15) Anti-modèles

Les actions critiques ne sont cachées que dans le menu contextuel.
Articles sans texte (icônes uniques), en particulier dans les listes.
Fermeture accidentelle du curseur lors du passage au sous-menu (pas de retard/couloir).
Le menu recouvre l'élément source ou passe par l'écran (pas de flip/shift).
Destructif sans confirmation/undo.
Droits non évidents (le paragraphe disparaît sans explication).


16) Liste de vérification QA

Disponibilité

  • 'role = « menu « '/' menuitem 'sont corrects, roving tabindex et flèches fonctionnent.
  • Esc ferme le menu, le focus revient à la source.
  • Le contraste et les anneaux de focus correspondent à AA.

Comportement

  • L'ordre des points reflète la fréquence et le risque ; destructeurs en bas.
  • Le positionnement tient compte des bords (flip/shift) ; les animations sont rapides (≤ 200 ms).
  • Le sous-menu s'ouvre selon ArrowRight et ne tremble pas (hover-intent 80-120 ms).

Mobile

  • Long-press avec haptique ; bottom-sheet est confortable avec le pouce.
  • Swipe-actions ont undo ; les zones de la cabale ≥ 44 × 44.

Sécurité

  • Confirmation/non d'actes dangereux ; les raisons sont claires.
  • Il n'y a pas de fuite de données privées dans les indices/labels.

Métriques

  • Le CTR/temps jusqu'au clic est retiré ; misclick/undo sont surveillés.

17) Réalisation : ouverture/fermeture et clic-out

js const btn=document.getElementById('more'), menu=document.getElementById('menu-1');
const open=()=>{ menu.hidden=false; btn.setAttribute('aria-expanded','true'); menu.querySelector('[role^="menuitem"]').focus(); };
const close=()=>{ menu.hidden=true; btn.setAttribute('aria-expanded','false'); btn.focus(); };
btn.addEventListener('click', e=>{ menu.hidden?open():close(); });
document.addEventListener('pointerdown', e=>{ if(!menu.hidden &&!menu.contains(e.target) && e.target!==btn) close(); });
window.addEventListener('blur', close);

18) Documentation dans le système de conception

Компоненты: `ContextMenu`, `MenuItem`, `Submenu`, `BottomSheet`, `SwipeAction`, `CommandPalette`.
Tokens de taille/hauteur de ligne/rayon/animation.
Hydes par accessibilité (ARIA, clavier, typeahead).
« Do/Don't » avec des exemples de regroupement, de positionnement et de confirmation.


Résumé succinct

Les menus contextuels et les actions rapides accélèrent le travail, s'ils sont prévisibles, accessibles et sécurisés : deux chemins d'appel, des étiquettes claires avec des icônes, un regroupement raisonnable, une confirmation/sans risque, une navigation clavier correcte et un positionnement clair. Fixez les jetons et les modèles dans le système de conception - et les utilisateurs agiront rapidement sans crainte de se tromper.

Contact

Prendre contact

Contactez-nous pour toute question ou demande d’assistance.Nous sommes toujours prêts à vous aider !

Commencer l’intégration

L’Email est obligatoire. Telegram ou WhatsApp — optionnels.

Votre nom optionnel
Email optionnel
Objet optionnel
Message optionnel
Telegram optionnel
@
Si vous indiquez Telegram — nous vous répondrons aussi là-bas.
WhatsApp optionnel
Format : +code pays et numéro (ex. +33XXXXXXXXX).

En cliquant sur ce bouton, vous acceptez le traitement de vos données.