Problema de arrastre de componentes personalizados
Con esto '''js Vista: { arranque: 'noDrag' }
Lee la respuesta completa abajo ↓Pregunta
Así es como he creado un componente personalizado:
comps.addType('custom-video', {
extiende: 'imagen',
isComponent: function (el) {
si (el.getAttribute && el.getAttribute('element-type') === 'custom-video') {
return {type: 'custom-video'};
}
},
modelo: {
Predeterminados: {
'tipo de vista previa de vídeo': 'gif',
rasgos: [{
tipo: 'select',
etiqueta: 'Tipo',
Nombre: 'tipo de avance de vídeo',
opciones: [{valor: 'GIF', nombre: 'GIF'},
{valor: 'imagen', nombre: 'Imagen'}],
cambioprop: 1
}],
Seleccionable: Verdadero
},
init: function () {
this.listenTo(this, 'change:video-preview-type', this.updateSrc);
},
updateSrc: function (component, value) {
atributos const = componentes.atributos.atributos;
Que src;
si (valor === 'gif') {
src = atributos['gif'];
} si no (valor === 'imagen') {
src = atributos['imagen'];
}
component.view.$el.find('img').attr('src', src);
this.set('src', src);
}
},
Vista: {
eventos: {
dblclick: función () {
postDoubleClickEvent(EditorEvents.VIDEO_DOUBLE_CLICK);
}
}
}
});
Este es mi bloque personalizado:
blockManager.add('Video', {
etiqueta: 'Vídeo',
Contenido: '<a style="display: inline-block"><img element-type="vaetas-video" style="width: 400px; object-fit: cover" src="https://argoswimvideo.com/wp-content/uploads/2017/11/video-placeholder-1280x720-40.jpg"></a>',
atributos: {
Clase: 'GJS-Block FA FA-Film',
título: 'Insertar vídeo'
}
});
El caso es que he envolvido la etiqueta de imagen dentro <a> de la etiqueta cuando se renderiza en lienzo. Cuando hago clic en el elemento e intento arrastrarlo, solo <img> <a> arrastra la etiqueta y permanece en su lugar original.
Respuestas (3)
Con esto '''js Vista: { arranque: 'noDrag' }
Sigues dejando que la vista capture tus eventos de clic, así que arréglalo:
'''js
Vista: {
eventos: {
arranque: 'noDrag'
}
}
Bueno, veo dos soluciones diferentes para este caso:
- Fácil y rápido, haz que el componente 'personalizado-vídeo' no sea arrastrable, así que tienes que arrastrar al padre para moverlo. El pequeño inconveniente es más desde el punto de vista de la experiencia de usuario, obligas a los usuarios a seleccionar el padre.
- Solución más sólida. Haz que el <a>elemento '' sea un componente personalizado en sí mismo, algo como 'custom-video-wrapper', que por defecto debería contener el componente 'custom-video' '''js comps.addType('custom-video-wrapper', { modelo: { Predeterminados: { etiquetaNombre: 'a', Componentes: { // Aquí defines componentes por defecto Tipo: 'vídeo personalizado', seleccionable: false, Hoverable: falso, }, ... Rasgos: ... Probablemente necesitarás las mismas características/propiedades pero con sus cambios los propagarás a la Componente de 'vídeo personalizado' infantil
Gracias @artf pero ahora surge un nuevo problema: cuando arrastro el componente envoltorio-personalizado por el lienzo, el personalizado-video no se arrastra con él, solo se <a> arrastra la etiqueta.
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #2697
[PREGUNTA] Problema con el tipo de componente personalizado y la celda de la tabla
¡Hola! Estoy intentando añadir un tipo de componente personalizado: '''javascript domc.addType('image-block', { extender: 'celda', modelo:...
Issue #2614
[PREGUNTA] Actualización de vista recursiva de un componente personalizado
Hola, He definido un tipo personalizado como: '''javascript editor. DomComponents.addType('customType', { modelo: { Predeterminados: { tipo...
Issue #2456
[PREGUNTA] (Posiblemente un error) Cómo aplicar rasgos a los componentes utilizados para la inicialización de GrapesJ
Estoy usando Esto funciona, pero solo para bloques que se añaden o arrastran y soltan manualmente al editor después de inicializarse. Si ap...
Issue #1959
[Pregunta] Editar innerHTML en un botón personalizado
Hola a todos, Estoy intentando cambiar el texto en un componente de botón, pero no consigo editarlo. He añadido este tipo: Incluí el paráme...
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 →Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.