Issue #2696✓ ResueltoAbierto el 2 de abril de 2020por kuhelbeherReacciones 10

¿Cómo puedo crear bloque con imagen de fondo con un comportamiento similar a una "imagen" incorporada?

Respuesta rápidapor kuhelbeher6

@noogen Gracias por el consejo, lo implementé así: '''javascript const domc = editor. DomComponents domc.addType('image-block', { extender: 'por defecto', modelo: { valores predeterminados: función () { return { nombre: 'Imagen de fondo', Tipo: 'Bloque de imagen', etiquetaNombre: 'div', nulo: falso, Droppable: Cierto...

Lee la respuesta completa abajo ↓

Pregunta

Hola, estoy intentando crear un bloque con imagen de fondo (similar a Grapedrop Image Box). He añadido un componente nuevo así: '''javascript domc.addType('image-block', { extiende: 'imagen', modelo: { predeterminados: función() { return { nombre: 'Imagen de fondo', Tipo: 'Bloque de imagen', etiquetaNombre: 'div', nulo: falso, Droppable: Cierto, Redimensionable: Verdadero } } }, Vista: { etiquetaNombre: 'div', updateSrc: function() { const { model, em } = this; const srcResult = model.getSrcResult(); const style = model.getStyle(); const isDefaultSrc = model.isDefaultSrc(); const url = "url('".concat(srcResult, "')");

if (srcResult) { model.addStyle({ '__bg-tipo': 'img', 'imagen-fondo': isDefaultSrc && style['imagen-fondo'] || URL, 'tamaño de fondo': estilo['tamaño de fondo'] || 'tapadera', 'posición-fondo': estilo['posición-fondo'] || 'centro central', 'apego de fondo': estilo['apego de fondo'] || 'scroll', 'repetición de fondo': estilo['repetición de fondo'] || 'sin repetición' });

em.trigger('component:toggled'); } esto.$elsrcResulta? 'removeClass' : 'addClass' }, onRender: function() { this.updateSrc() } } })

Y también añadí bloqueo:
'''javascript
  bm.add('image-block', {
    etiqueta: 'Imagen de fondo',
    categoría: 'Básico',
    Contenido: {
      nombre: 'Imagen de fondo',
      Tipo: 'Bloque de imagen',
      activeOnRender: 1,
      estilo: {
        Altura: '200px'
      }
    }
  })

Pero, por desgracia, no puedo dejar caer ningún bloque dentro:

! GIF 02 04 2020 27-12-15

Grapedrop Image Box tiene el mismo problema. ¿Es posible dejar caer elementos dentro de tal composición?

Respuestas (2)

👍 Muy útilkuhelbeher8 de abril de 2020

@noogen Gracias por el consejo, lo implementé así: '''javascript const domc = editor. DomComponents

domc.addType('image-block', { extender: 'por defecto', modelo: { valores predeterminados: función () { return { nombre: 'Imagen de fondo', Tipo: 'Bloque de imagen', etiquetaNombre: 'div', nulo: falso, Droppable: Cierto } } }, Vista: { init () { this.listenTo(this.model, 'active', this.onActive) this.listenTo(this.model, 'change:src', this.updateImage) }, eventos: { dblclick: 'onActive' }, onActive () { editor.runCommand('open-assets', { Objetivo: esto.modelo, Tipos: ['Imagen'], aceptar: 'imagen/*' }) }, updateImage (model, url) { si (url) { const style = model.getStyle()

model.setStyle({ 'imagen de fondo': estilo['color-fondo'] || 'url("${url}")', 'tamaño de fondo': estilo['tamaño de fondo'] || 'tapadera', 'posición-fondo': estilo['posición-fondo'] || 'centro central', 'repetición de fondo': estilo['repetición de fondo'] || 'no-repeat', 'Altura-min': estilo['altura-min'] || '200px' }) } } } })

const bm = editor. BlockManager

bm.add('image-block', { etiqueta: 'Imagen de fondo', categoría: 'Básico', Contenido: { Tipo: 'Bloque de imagen', activeOnRender: cierto, estilo: { 'imagen-fondo': 'url('${window.origin}/imágenes/image-placeholder.png')', 'Altura mínima': '200px', 'tamaño de fondo': 'cubierta', 'posición de fondo': 'centro central', 'repetición de fondo': 'sin repetición' } } })

noogen5 de abril de 2020

@kuhelbeher porque, en última instancia, sigue siendo una imagen. No es para usar/anular como quieres porque en el código del back-end (mira tanto el modelo de componentes de imagen como la vista) https://github.com/artf/grapesjs/blob/dev/src/dom_components/view/ComponentImageView.js#L55 y https://github.com/artf/grapesjs/blob/dev/src/dom_components/model/ComponentImage.js#L83 siguen estando muy conectados. Es mejor que crees un componente envoltorio y ejecutes el comando 'open-assets' en 'onActive' de la vista. Pista, ver el problema - https://github.com/artf/grapesjs/issues/2250

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.