GH GambleHub

Menús contextuales y acciones rápidas

1) Propósito y ámbito de aplicación

Los menús contextuales y las acciones rápidas acortan la ruta de acceso a las operaciones utilizadas con frecuencia:
  • Acciones locales sobre el objeto (tarjeta, fila de tabla, coeficiente).
  • Acciones por lotes sobre selección.
  • Opciones ocultas pero no críticas (secundarias).
  • Regla: las acciones críticas y primarias no se ocultan sólo en el menú contextual.

2) Disparadores y opciones

Right-click/Shift + F10/Menu key es un contexto clásico.
Icon button (kebab '⋮', meatballs '...', context) es versátil para el tach/desktop.
Long-press (400-600 ms) es el equivalente móvil al right-click.
El comando palette (⇧⌘P/Ctrl + K) son comandos rápidos globales con búsqueda.
Swipe-reveal (listas iOS/Android) - abre una serie de cortos rápidos.

Recomendación: proporcione un mínimo de dos métodos de llamada (icono + clic/tecla de contexto).


3) Contenido y prioridad

Los primeros 1-3 puntos son acciones frecuentes; a continuación, separador; a continuación, las menos utilizadas.
Destructivo - al final, marcado con el color/icono (y a menudo - a través de la confirmación/undo).
Formulaciones - verbo + objeto («Añadir a favoritos», «Copiar ID»).
La etiqueta ≠ sólo un icono: el icono es un amplificador, no un reemplazo de texto.


4) Agrupación y estado

Separadores para bloques lógicos (ver, editar, administrar, peligroso).
Состояния: `disabled`, `checked` (`menuitemcheckbox`/`menuitemradio`), `destructive`.
No mostramos roles inaccesibles si esto confunde; alternativamente - mostramos como 'disabled' con una pista de la razón.


5) Disponibilidad (A11y)

Contenedor: 'role =' menu ', elementos:' role = 'menuitem '/' menuitemcheckbox '/' menuitemradio'.
Roving tabindex: el único 'tabindex =' 0 'en el elemento actual, el resto' -1 '.
Flechas ↑↓ - mover, →/← - entrar/salir del submenú. Enter/Space - Activación, Amb - Cerrar.
Typeahead: imprimir la primera letra transfiere el enfoque al elemento.
El anillo focal es visible; contraste de texto e iconos ≥ AA.
Para el icono-botón, utilice 'aria-haspopup =' menu 'y' aria-expanded '.

Ejemplo de marcado:
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>
Navegación (esquema 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) Posicionamiento y rendimiento

Abra el menú en la fuente (click-point/icono), desplazamiento 4-8 px; vigile los bordes de la pantalla (flip/shift).
Portal/capa en la parte superior ('z-index') con un clic fuera de la captura.
Renderiza con pereza, recicla la lista en menús largos (no hace falta virtualización, pero evita cientos de elementos).
Animaciones sólo 'opacity/transformación', duración 140-200 ms (fuera más rápido: 100-160 ms).
El submenú se abre por 'ArrowRight' y hover con un retraso de 80-120 ms (anti-flicker).


7) Patrones móviles

Long-press con háptica; timing 450 ± 100 ms.
Hoja de bottom como forma de menú contextual (thumb-reachable).
Acciones swipe en las listas: a la izquierda - «archivo/favoritos», a la derecha - «eliminar» (confirmación/undo).
Zonas de clic ≥ 44 × 44, las firmas son breves, los iconos son 20-24 px.


8) Confirmaciones, undo y seguridad

Acciones destructivas: o bien la segunda confirmación (modal/confinm pattern) o undo 5-10 s.
Financiera/de Riesgo - a través de un claro confinamiento con el contexto de las consecuencias.
Muestra la razón 'deshabilitada' ('No tiene razón', 'Ha alcanzado el límite').


9) Acciones rápidas sin menú

Shortcats en línea en línea (iconos «», «», «⋯»).
Hover-reveal (escritorio): muestra las acciones al guiar, pero también deja un disparador explícito.
Comando palette: búsqueda por acción, teclas de acceso rápido en las pistas («⌘S», «Ctrl + Enter»).


10) Copyright e iconos

Verbo + objeto, 2-3 palabras.
Comience con una acción («Eliminar registro»...), no con un sustantivo («Eliminar registro»).
Iconos de un solo conjunto; utilice los mismos pictogramas para realizar las mismas acciones en todo el producto.
Pistas explicativas ('title '/tooltip) para elementos ambiguos.


11) Telemetría y experimentos

CTR por artículo, mediana de tiempo de apertura a clic, frecuencia cancelada/undo.
Número de misclick's (destructivo → cancelado).
A/B: orden y agrupación de elementos, presencia de cortos rápidos en la lista.
Los registros de elementos «invisibles» (nadie utiliza) son candidatos a la eliminación/transferencia.


12) Tokens del sistema de diseño (ejemplo)

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) Patrones por componente

Tarjetas/fichas: icono '⋯' en la esquina superior derecha; en hover - se muestra, en touch - se ve siempre.
Filas de la tabla: '⋯' en la última columna; con selección múltiple: panel de acciones por lotes en la parte superior/inferior.
Listas de chat/notificaciones: swipe-actions (archivo/leído/eliminado) con undo.
Galerías de medios: tap largo → modo multi-juego + barra de acción inferior.


14) Especificidad de iGaming

Apuesta rápida (apuesta rápida): en el menú contextual del coeficiente - «Poner X» (preconfiguración), «Añadir al cupón», «Suscribirse al cambio de coeficiente». La confirmación/undo es obligatoria.
Favoritos/suscripciones: «Añadir proveedor/juego a favoritos», «Suscribirse a un torneo».
Cache out: con confirmación en línea y suma actual; sólo está disponible cuando el estado del mercado.
Moderación/reportes: «Quejarse», «Bloquear Chat» son seguros, visibles por sus roles.
Juego responsable: «Establecer un límite», «Pausa 24h» - sin colores agresivos, con una clara descripción de las consecuencias.


15) Anti-patrones

Las acciones críticas sólo se ocultan en el menú contextual.
Párrafos sin texto (algunos iconos), especialmente en las listas.
Cierre accidental para la salida del cursor al pasar al submenú (sin retraso/pasillo).
El menú superpone el elemento de origen o sale de la pantalla (sin flip/mayúsculas).
Destructivo sin confirmación/undo.
Derechos inobjetables (el párrafo falta sin explicación).


16) QA-check-list

Disponibilidad

  • 'role =' menu '/' menuitem 'son correctos, roving tabindex y las flechas funcionan.
  • Aprox cierra el menú, el foco vuelve a la fuente.
  • El contraste y los anillos de enfoque corresponden a AA.

Comportamiento

  • El orden de los puntos refleja la frecuencia y el riesgo; destructivo en la parte inferior.
  • El posicionamiento tiene en cuenta los bordes (flip/shift); animaciones rápidas (≤ 200 ms).
  • El submenú se abre por ArrowRight y no «tiembla» (hover-intent 80-120 ms).

Móvil

  • Long-press con háptica; bottom-sheet cómodo con el pulgar.
  • Swipe-actions tienen undo; zonas de la cábala ≥ 44 × 44.

Seguridad

  • Confirmación/undo para actividades peligrosas; las razones disabled son claras.
  • No hay filtración de datos privados en las pistas/etiquetas.

Métricas

  • Se dispara CTR/tiempo antes del clic; misclick/undo monitor.

17) Implementación: apertura/cierre y clic-hacia fuera

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) Documentación en el sistema de diseño

Компоненты: `ContextMenu`, `MenuItem`, `Submenu`, `BottomSheet`, `SwipeAction`, `CommandPalette`.
Señales de tamaño/altura de fila/radio/animación.
Gaidas por accesibilidad (ARIA, teclado, typeahead).
"Do/Don 't' con ejemplos de agrupación, posicionamiento y confirmaciones.


Resumen breve

Los menús contextuales y las acciones rápidas aceleran si son predecibles, accesibles y seguros: dos rutas de llamada, etiquetas claras con iconos, agrupación razonable, confirmación/undo de riesgo, navegación por teclado correcta y posicionamiento claro. Fije los tokens y patrones en el sistema de diseño, y los usuarios actuarán rápidamente sin temor a equivocarse.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.