Issue #2103💬 RespondidoAbierto el 27 de junio de 2019por imanubhardwajReacciones 1

Problema de arrastre de componentes personalizados

Respuesta rápidapor artf1

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.

Demo en directo

Respuestas (3)

artf31 de julio de 2019

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'
    }
  }
artf4 de julio de 2019

Bueno, veo dos soluciones diferentes para este caso:

  1. 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.
  2. 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
imanubhardwaj4 de julio de 2019

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.

Demo en directo

Preguntas y respuestas relacionadas

Continúa investigando con debates sobre temas similares.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

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 →
Opción premium

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.