Pregunta: Usa las flechas para mover bloques en el lienzo configurado en modo de posicionamiento absoluto
No, desafortunadamente, en ese caso, el keymap personalizado sería la única solución. Deberías simplemente conseguir el componente seleccionado y actualizar su estilo.
Lee la respuesta completa abajo ↓Pregunta
Hola, estoy creando una solución para que los estudiantes cuenten sus experiencias en el instituto como diapositivas hechas desde el editor de grapej (similar a Canva), y he configurado el editor en modo 'absoluto', que funciona de maravilla. Sin embargo, no consigo encontrar la forma de mover el bloque que se cae en el editor con las teclas de flecha. Sé que existe la asignación personalizada de keymaps y miraré de añadir esa funcionalidad, pero solo quiero saber si me he dejado algo y si hay otras opciones mejores.
Respuestas (4)
No, desafortunadamente, en ese caso, el keymap personalizado sería la única solución. Deberías simplemente conseguir el componente seleccionado y actualizar su estilo.
He encontrado una solución funcional para esto de la siguiente manera:
grapesjs.init({
keymaps: {
Predeterminados: {
"ns:up" : { teclas: 'arriba, shift+up', manejador: 'moveUp' },
"ns:down" : { teclas: 'abajo, shift+down', manejador: 'moveDown' },
"ns:left" : { teclas: 'izquierda, shift+izquierda', manejador: 'moveLeft' },
"ns:right" : { teclas: 'right, shift+right', handler: 'moveRight' }
}
},
...
Los comandos se están añadiendo de la siguiente manera:
editor. Commands.add("moveUp", { run: function(editor) { moveSelectedElement(editor, -5, "top"); }});
editor. Commands.add("moveDown", { run: function(editor) { moveSelectedElement(editor, 5, "top")}});
editor. Commands.add("moveLeft", { run: function(editor) { moveSelectedElement(editor, -5, "left")}});
editor. Commands.add("moveRight", { run: function(editor) { moveSelectedElement(editor, 5, "left")}});
El método 'moveSelectedElements' hace lo siguiente:
función moveSelectedElement(editor, pixel, property) {
var model = editor.getSelected();
var style = model.getStyle();
var position = style[property].replace('px','').replace(' ', '');
Redondea al múltiplo más cercano de 5 para alinearse con la cuadrícula
var newPosition = Math.ceil((Number(position)+Number(pixel))/5)*5
style[property] = newPosition + "px";
model.setStyle(style);
editor.trigger('component:toggled');
}
Sin embargo, al mover los elementos con las flechas, el lienzo también se desplaza, que es el comportamiento predeterminado de los bowser.
¿Cómo podemos evitar la propagación por defecto con los keymaps ('e.preventDefault()')? ¿Debería ocurrir esto automáticamente o hay alguna forma de configurarlo?
keymaps.add('ns:my-keymap', '⌘+s, ctrl+s', 'some-gjs-command', { Evitar la acción predeterminada del navegador prevente: cierto, });
Gracias por informar de esto, @wfcheng.
Buena pregunta sobre Pregunta: Usa las flechas para mover bloques en el lienzo configurado en modo de posicionamiento absoluto. El enfoque recomendado con GrapesJS es usar la API orientada a eventos.
Empieza aquí:
- Consulta la documentación de GrapesJS de tu módulo específico
- Busca el método del oyente de eventos 'on()'
- La mayoría de las operaciones se pueden realizar escuchando eventos del editor y de los componentes
Patrones comunes: '''javascript Prestad atención a los cambios editor.on('Change', () => console.log('Something Changed'));
Ciclo de vida de los componentes editor.on('component:mount', (c) => console.log('component ready', c)); editor.on('component:update', (c) => console.log('component updated', c));
**Si sigues atascado:**
- Compartir una reproducción mínima de CodeSandbox
- Incluye lo que ya has probado
- Menciona tu versión GrapesJS
- ¡La comunidad está aquí para ayudar!
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #4192
Problema con el límite de arrastre con dragMode: absoluto/translate
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Chrome, Firefox Enlace de demo reproducib...
Issue #6695
Evitar que el defecto por defecto no funcione en Edge
Versión GrapesJS [x] Confirmo que uso la última versión de GrapesJS ¿Qué navegador usas? Edge 144.0.3719.92 Enlace de demo reproducible htt...
Issue #5083
Los bloques no se pueden arrastrar para el lienzo
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Tauri Enlace de demo reproducible Describ...
Issue #3342
jQuery no funciona para script en el componente
¡Hola! He intentado añadir jquery tanto en Canvas como en index.html Lo estoy añadiendo en lienzo así- 'canvas = editor. Lienzo; const scri...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.
Explora plugins gratuitos →Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.
Explora plugins premium →Tutoriales relacionados
Guías detalladas sobre el mismo tema.
Tutorial
How to Build a Production GrapesJS Editor: The Complete Walkthrough of Brief, Preset, Plugins, and Services
A complete walkthrough of building a production GrapesJS editor: how to choose a preset, pick plugins, and scope setup services without burning a sprint.
Tutorial
Big Updates: TinyMCE 8 and Placeholder 2.0 for GrapesJS
In May we shipped major updates to two of our most popular GrapesJS plugins — TinyMCE Inline Text Editor and Placeholder.
Tutorial
Find the Right GrapesJS Plugin in Seconds: Smarter Discovery Is Live
We're shipping a set of discovery upgrades. New label filters, a proper compatibility switch for GrapesJS vs Studio, one-click and a smarter sort bar.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.