¿Cómo puedo crear bloque con imagen de fondo con un comportamiento similar a una "imagen" incorporada?
@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:
Grapedrop Image Box tiene el mismo problema. ¿Es posible dejar caer elementos dentro de tal composición?
Respuestas (2)
@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' } } })
@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.
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 #2777
[PREGUNTA] Cómo actualizar estilos en el Gestor de estilos
Hola. Creé un componente personalizado donde configuré imagen de fondo mediante un gestor de recursos personalizado Código de bloque person...
Issue #2549
[PREGUNTA] Actualizar vista de componentes al cambiar la propiedad
Hola a todos, Estoy intentando crear un componente que actualice su vista en función del valor de una propiedad '''javascript editor. DomCo...
Issue #1895
[PREGUNTA] Arrastra el componente sobre el lienzo con script, script añadido varias veces.
Hola, no estoy seguro de si esto es un error o no. Pero he notado un comportamiento extraño: cuando arrastro un bloque que tiene un compone...
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.