Desenvolvendo relacionamentos saudáveis e autoestima através de métodos científicos
© 2024 Transformação Emocional. Todos os direitos reservados. Dias", sub_headline: "Descubra o método científico que já ajudou mais de 25.000 pessoas a desenvolver relacionamentos saudáveis e autoestima inabalável", video_title: "🎬 Assista ao Vídeo Exclusivo e Descubra Como", expert_name: "Dra. Clara", expert_credentials: "Psicóloga Certificada CRP 06/12345 - Especialista em Relacionamentos", original_price: "R$ 58,90", discounted_price: "R$ 27,90", cta_button: "🎯 QUERO TRANSFORMAR MINHA VIDA AGORA", background_color: "#be185d", surface_color: "#fdf2f8", text_color: "#831843", primary_action_color: "#9d174d", secondary_action_color: "#ec4899" }; async function onConfigChange(config) { // Atualiza o conteúdo do texto const mainHeadline = document.getElementById('main-headline'); const subHeadline = document.getElementById('sub-headline'); const videoTitle = document.getElementById('video-title'); const nome_do_especialista = document.getElementById('nome_do_especialista'); const nome_do_especialista2 = document.getElementById('nome-especialista-2'); const expertCredentials = document.getElementById('credenciais-de-especialista'); const originalPrice = document.getElementById('preço-original'); const discountedPrice = document.getElementById('preço-com-desconto'); const ctaButtons = document.querySelectorAll('#cta-button, botão'); if (principalHeadline) mainHeadline.textContent = config.main_headline || defaultConfig.main_headline; if (subHeadline) subHeadline.innerHTML = config.sub_headline || defaultConfig.sub_headline; if (videoTitle) videoTitle.textContent = config.video_title || defaultConfig.video_title; if (expertName) expertName.textContent = config.expert_name || defaultConfig.expert_name; se (expertName2) expertName2.textContent = config.expert_name || defaultConfig.expert_name; se (expertCredentials) expertCredentials.textContent = config.expert_credentials || defaultConfig.expert_credentials; se (originalPrice) originalPrice.textContent = config.original_price || defaultConfig.original_price; se (discountedPrice) discountedPrice.textContent = config.discounted_price || defaultConfig.discounted_price; // Atualizar cores const backgroundColor = config.background_color || defaultConfig.background_color; const surfaceColor = config.surface_color || defaultConfig.surface_color; const textColor = config.text_color || defaultConfig.text_color; const primaryActionColor = config.primary_action_color || defaultConfig.primary_action_color; const secondaryActionColor = config.secondary_action_color || defaultConfig.secondary_action_color; // Aplicar cor de fundo às seções de gradiente const gradientSections = document.querySelectorAll('.gradient-bg'); gradientSections.forEach(section => { section.style.background = `linear-gradient(135deg, ${backgroundColor} 0%, ${primaryActionColor} 100%)`; }); // Aplicar cor de superfície aos cartões e fundos brancos const whiteElements = document.querySelectorAll('.bg-white'); whiteElements.forEach(element => { element.style.backgroundColor = surfaceColor; }); // Aplicar cor de texto const textElements = document.querySelectorAll('.text-gray-800, .text-gray-600, .text-gray-700'); textElements.forEach(element => { if (element.classList.contains('text-gray-800')) { element.style.color = textColor; } else { element.style.color = textColor + 'CC'; // Adicionar opacidade } }); // Aplicar cor de ação primária aos botões principais const primaryButtons = document.querySelectorAll('.bg-green-600'); primaryButtons.forEach(button => { button.style.backgroundColor = '#059669'; // Cor verde para todos os botões CTA }); } function mapToCapabilities(config) { return { recolorables: [ { get: () => config.background_color || defaultConfig.background_color, set: (value) => { config.background_color = value; window.elementSdk.setConfig({ background_color: value }); } }, { get: () => config.surface_color || defaultConfig.surface_color, set: (value) => { config.surface_color = value; window.elementSdk.setConfig({ surface_color: value }); } }, { get: () => config.text_color || defaultConfig.text_color, definir: (valor) => { config.text_color = valor; window.elementSdk.setConfig({ text_color: valor }); } }, { obter: () => config.primary_action_color || defaultConfig.primary_action_color, definir: (valor) => { config.primary_action_color = valor; window.elementSdk.setConfig({ primary_action_color: valor }); } }, { obter: () => config.secondary_action_color || defaultConfig.secondary_action_color, definir: (valor) => { config.secondary_action_color = valor; window.elementSdk.setConfig({ secondary_action_color: valor }); } } ], borderables: [], fontEditable: indefinido, fontSizeable: indefinido }; } function mapToEditPanelValues(config) { return new Map([ ["principal_título", config.principal_título || defaultConfig.principal_título], ["subtítulo", config.sub_título || defaultConfig.sub_título], ["título_vídeo", config.título_vídeo || defaultConfig.título_vídeo], ["nome_especialista", config.nome_especialista || defaultConfig.nome_especialista], ["credenciais_especialistas", config.credenciais_especialistas || defaultConfig.credenciais_especialistas], ["preço_original", config.preço_original || defaultConfig.preço_original], ["preço_com_desconto",config.discounted_price || defaultConfig.discounted_price], ["cta_button", config.cta_button || defaultConfig.cta_button] ]); } // Inicializar SDK if (window.elementSdk) { window.elementSdk.init({ defaultConfig, onConfigChange, mapToCapabilities, mapToEditPanelValues }); } // Funcionalidade do temporizador de contagem regressiva function startCountdown() { let timeLeft = 24 * 60 * 60 - 1; // 23:59:59 function updateCountdown() { const hours = Math.floor(timeLeft / 3600); const minutes = Math.floor((timeLeft % 3600) / 60); const seconds = timeLeft % 60; const timeString = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; const countdownElements = document.querySelectorAll('#countdown, #countdown-2, #countdown-3'); countdownElements.forEach(element => { if (element) element.textContent = timeString; }); if (timeLeft > 0) { timeLeft--; } else { timeLeft = 24 * 60 * 60 - 1; // Redefinir para 23:59:59 } } updateCountdown(); setInterval(updateCountdown, 1000); } // Funcionalidade do botão de reprodução de vídeo function setupVideoPlayer() { const playButton = document.querySelector('.play-button'); if (playButton) { playButton.addEventListener('click', function() { // Criar mensagem de vídeo reproduzido const message = document.createElement('div'); message.className = 'fixed top-4 right-4 bg-blue-500 text-white px-6 py-3 rounded-lg shadow-lg z-50 transform translate-x-full transition-transform duration-300'; message.textContent = '🎬 Vídeo iniciado! Continue rolando para ver a oferta especial.'; document.body.appendChild(message); // Animar em setTimeout(() => { message.style.transform = 'translateX(0)'; }, 100); // Animar e remover setTimeout(() => { message.style.transform = 'translateX(100%)'; setTimeout(() => { if (document.body.contains(message)) { document.body.removeChild(mensagem); } }, 300); },4000); }); } } // Manipuladores de clique de botão (agora apenas para botão de reprodução de vídeo) function setupButtonHandlers() { // Não há necessidade de manipuladores de botão CTA, pois agora eles usam links diretos } // Dados de notificações de compra const buyData = [ { nome: "Maria Silva", cidade: "São Paulo", estado: "SP", horário: "2 minutos atrás" }, { nome: "Ana Costa", cidade: "Rio de Janeiro", estado: "RJ", horário: "3 minutos atrás" }, { nome: "Juliana Santos", cidade: "Belo Horizonte", estado: "MG", horário: "5 minutos atrás" }, { nome: "Carla Oliveira", cidade: "Salvador", estado: "BA", horário: "7 minutos atrás" }, { nome: "Fernanda Lima", cidade: "Curitiba", estado: "PR", horário: "8 minutos atrás" }, { nome: "Patrícia Souza", cidade: "Fortaleza", estado: "CE", horário: "10 minutos atrás" }, {nome: "Roberta Alves", cidade: "Brasília", estado: "DF", horário: "12 minutos atrás" }, { nome: "Camila Ferreira", cidade: "Recife", estado: "PE", horário: "15 minutos atrás" }, { nome: "Luciana Rocha", cidade: "Porto Alegre", estado: "RS", horário: "18 minutos atrás" }, { nome: "Daniela Martins", cidade: "Manaus", estado: "AM", horário: "20 minutos atrás" }, { nome: "Gabriela Pereira", cidade: "Goiânia", estado: "GO", horário: "22 minutos atrás" }, { nome: "Renata Barbosa", cidade: "Belém", estado: "PA", horário: "25 minutos atrás" }, { nome: "Vanessa Cardoso", cidade: "São Luís", estado: "MA", horário: "28 minutos atrás" }, { nome: "Priscila Dias", cidade: "Natal", estado: "RN", horário: "30 minutos atrás" }, { nome: "Tatiana Gomes", cidade: "João Pessoa", estado: "PB", horário: "32 minutos atrás" }, { nome: "Simone Ribeiro", cidade: "Aracaju", estado: "SE", horário: "35 minutos atrás" }, { nome: "Cristina Moura", cidade: "Maceió", estado: "AL", horário: "38 minutos atrás" }, { nome: "Adriana Nunes", cidade: "Teresina", estado: "PI", horário: "40 minutos atrás" }, { nome: "Mônica Castro", cidade: "Campo Grande", estado: "MS", horário: "42 minutos atrás" }, { nome: "Larissa Mendes", cidade: "Cuiabá", estado:"MT", tempo: "45 minutos atrás" } ]; // Mostrar notificações de compra function showPurchaseNotifications() { let currentIndex = 0; function showNextNotification() { if (currentIndex >= purchaseData.length) { currentIndex = 0; // Redefinir para o início } const purchase = purchaseData[currentIndex]; // Criar elemento de notificação const notification = document.createElement('div'); notification.className = 'fixed bottom-6 left-6 bg-green-500 text-white px-6 py-4 rounded-lg shadow-2xl z-50 transform -translate-x-full transition-all duration-500 max-w-sm'; notification.innerHTML = `
🛒
${purchase.name}
${purchase.city}/${purchase.state}
Comprou o método • ${purchase.time}
✅
`; document.body.appendChild(notification); // Animar em setTimeout(() => { notification.style.transform = 'translateX(0)'; }, 100); // Animar e remover setTimeout(() => { notification.style.transform = 'translateX(-100%)'; setTimeout(() => { if (document.body.contains(notification)) { document.body.removeChild(notification); } }, 500); }, 4000); currentIndex++; } // Mostrar a primeira notificação após 3 segundos setTimeout(showNextNotification, 3000); // Mostrar notificações subsequentes a cada 8-15 segundos (intervalo aleatório) setInterval(() => { const randomDelay = Math.random() * 7000 + 8000; // 8-15 segundos setTimeout(showNextNotification, randomDelay); }, 15000); } // Inicializa tudo quando o DOM é carregado document.addEventListener('DOMContentLoaded', function() { startCountdown(); setupVideoPlayer(); setupButtonHandlers(); showPurchaseNotifications(); }); c())}}}})();