Comparación de Productos
El widget incluye una funcionalidad de comparación que permite analizar hasta 4 productos lado a lado, con análisis inteligente de pros y contras.
Funcionalidad
- Comparar hasta 4 productos simultáneamente
- Tabla de especificaciones lado a lado
- Análisis IA con pros/contras (planes Growth+)
- Persistencia en
sessionStorage - Interfaz responsive (cards en móvil, tabla en desktop)
Uso básico
Añadir a comparación
El usuario puede añadir productos desde los resultados de búsqueda:
- Hover sobre un producto
- Click en el icono de comparación (o botón "Comparar")
- El producto se añade al panel de comparación
Panel de comparación
- Aparece en la parte inferior de la pantalla
- Muestra miniaturas de productos añadidos
- Click en "Comparar" para ver tabla completa
API de JavaScript
Añadir producto
const product = {
id: 'prod_123',
name: 'Nike Air Max',
price: 120,
imageUrl: 'https://...',
// ... otros campos
};
const added = widget.addToComparison(product);
// true si se añadió, false si ya existe o límite alcanzado
Verificar si está en comparación
if (widget.isInComparison('prod_123')) {
console.log('Ya está en la comparación');
}
Quitar producto
widget.removeFromComparison('prod_123');
Limpiar comparación
widget.clearComparison();
Obtener productos
const products = widget.comparisonProducts;
console.log(`Comparando ${products.length} productos`);
Abrir/cerrar panel
widget.openComparison();
widget.closeComparison();
Eventos
| Evento | Payload | Descripción |
|---|---|---|
comparison:add | { product } | Producto añadido |
comparison:remove | { productId } | Producto quitado |
comparison:clear | {} | Comparación limpiada |
comparison:open | {} | Panel abierto |
comparison:close | {} | Panel cerrado |
widget.on('comparison:add', ({ product }) => {
showToast(`${product.name} añadido a comparación`);
// Analytics
gtag('event', 'add_to_comparison', {
item_id: product.id,
item_name: product.name,
});
});
widget.on('comparison:clear', () => {
console.log('Comparación limpiada');
});
Límite de productos
El límite es 4 productos. Al intentar añadir más:
widget.on('comparison:add', ({ product }) => {
// Este evento NO se emite si el límite está alcanzado
});
// Para saber si se alcanzó el límite:
if (widget.comparisonProducts.length >= 4) {
showNotification('Máximo 4 productos para comparar');
}
Persistencia
Los productos de comparación se guardan en sessionStorage:
// Clave: neuroon_comparison_{shopId}
// Formato: JSON array de productos
// Se restaura al recargar la página
// Se limpia al cerrar el navegador
Desactivar persistencia
NeuroonWidget.init({
persistence: {
comparison: false, // Por defecto: true
},
});
Análisis IA
En planes Growth y superiores, la comparación incluye análisis inteligente:
Contenido del análisis
| Sección | Descripción |
|---|---|
| Pros | Ventajas de cada producto |
| Contras | Desventajas de cada producto |
| Mejor para | Caso de uso ideal |
| Veredicto | Recomendación basada en los productos |
Ejemplo de respuesta
{
"analysis": {
"products": [
{
"id": "prod_123",
"pros": ["Mejor calidad de materiales", "Mayor durabilidad"],
"cons": ["Precio más alto", "Menos colores disponibles"],
"bestFor": "Usuarios que priorizan calidad sobre precio"
},
{
"id": "prod_456",
"pros": ["Precio competitivo", "Variedad de colores"],
"cons": ["Materiales estándar"],
"bestFor": "Usuarios con presupuesto limitado"
}
],
"verdict": "Para uso diario, el producto A ofrece mejor relación calidad-precio. Para uso ocasional, el producto B es suficiente.",
"confidence": 0.87
}
}
Acceder al análisis
widget.on('comparison:open', async () => {
const products = widget.comparisonProducts;
if (products.length >= 2) {
// El análisis se genera automáticamente al abrir la comparación
// Se muestra en la UI del widget
}
});
Personalización
Traducciones
NeuroonWidget.init({
translations: {
comparison: {
title: 'Tu comparativa',
addProduct: 'Añadir otro producto',
removeProduct: 'Quitar',
maxProducts: 'Puedes comparar hasta {max} productos',
clearAll: 'Limpiar todo',
compare: 'Comparar ahora',
comparing: 'Comparando {count} productos',
// Análisis IA
aiAnalysis: 'Análisis inteligente',
pros: 'Puntos fuertes',
cons: 'Puntos débiles',
bestFor: 'Ideal para',
verdict: 'Conclusión',
// Tabla
specifications: 'Especificaciones',
differences: 'Ver diferencias',
similarities: 'Ver similitudes',
},
},
});
Estilos
/* Panel de comparación */
.neuroon-widget {
--nrn-comparison-bg: 30 41 59;
--nrn-comparison-border: 51 65 85;
}
/* Indicador de comparación en productos */
.neuroon-widget {
--nrn-compare-badge: 168 85 247; /* Púrpura */
}
Ejemplos de uso
Comparación desde código
// Añadir productos destacados automáticamente
async function setupFeaturedComparison() {
const featured = await fetchFeaturedProducts();
// Añadir los primeros 2 productos
featured.slice(0, 2).forEach(p => {
widget.addToComparison(p);
});
// Abrir comparación
widget.openComparison();
}
Integración con carrito
// Sugerir comparación antes de añadir al carrito
widget.on('click', ({ product }) => {
const comparison = widget.comparisonProducts;
if (comparison.length > 0 && !widget.isInComparison(product.id)) {
showPrompt({
message: '¿Quieres comparar antes de comprar?',
actions: [
{
text: 'Añadir a comparación',
onClick: () => widget.addToComparison(product),
},
{
text: 'Ir al producto',
onClick: () => window.location.href = product.url,
},
],
});
}
});
Analytics de comparación
widget.on('comparison:add', ({ product }) => {
gtag('event', 'add_to_comparison', {
item_id: product.id,
item_name: product.name,
price: product.price,
});
});
widget.on('comparison:open', () => {
const products = widget.comparisonProducts;
gtag('event', 'view_comparison', {
items: products.map(p => ({
item_id: p.id,
item_name: p.name,
})),
comparison_count: products.length,
});
});
Accesibilidad
La tabla de comparación cumple WCAG 2.2 AA:
- Navegación por teclado completa
- Headers de tabla con
scope - Anuncios ARIA para acciones
- Contraste de colores verificado
<!-- Estructura accesible generada -->
<table role="grid" aria-label="Comparación de productos">
<thead>
<tr>
<th scope="col">Característica</th>
<th scope="col">Nike Air Max</th>
<th scope="col">Adidas Ultraboost</th>
</tr>
</thead>
<!-- ... -->
</table>
Próximos pasos
- Asistente IA - Más sobre análisis IA
- Accesibilidad - Detalles WCAG
- JavaScript API - Todos los métodos