mfsobrin's picture
nome da empesa Consertaprint
1e4675a verified
Raw History Blame Contribute Delete
11.1 kB
// Consertaprint Website JavaScript
document.addEventListener('DOMContentLoaded', function() {
// Initialize all functionality
initMobileMenu();
initSmoothScrolling();
initContactForm();
initAnimations();
initScrollEffects();
console.log('Consertaprint website initialized successfully!');
});
// Mobile Menu Functionality
function initMobileMenu() {
const mobileMenuButton = document.getElementById('mobile-menu-button');
const mobileMenu = document.getElementById('mobile-menu');
if (mobileMenuButton && mobileMenu) {
mobileMenuButton.addEventListener('click', function() {
mobileMenu.classList.toggle('hidden');
// Animate hamburger icon
const icon = mobileMenuButton.querySelector('i');
if (mobileMenu.classList.contains('hidden')) {
icon.setAttribute('data-feather', 'menu');
} else {
icon.setAttribute('data-feather', 'x');
}
feather.replace();
});
// Close mobile menu when clicking on links
const mobileLinks = mobileMenu.querySelectorAll('a');
mobileLinks.forEach(link => {
link.addEventListener('click', function() {
mobileMenu.classList.add('hidden');
const icon = mobileMenuButton.querySelector('i');
icon.setAttribute('data-feather', 'menu');
feather.replace();
});
});
}
}
// Smooth Scrolling for Navigation Links
function initSmoothScrolling() {
const navLinks = document.querySelectorAll('a[href^="#"]');
navLinks.forEach(link => {
link.addEventListener('click', function(e) {
e.preventDefault();
const targetId = this.getAttribute('href');
const targetSection = document.querySelector(targetId);
if (targetSection) {
const navHeight = document.querySelector('nav').offsetHeight;
const targetPosition = targetSection.offsetTop - navHeight;
window.scrollTo({
top: targetPosition,
behavior: 'smooth'
});
}
});
});
}
// Contact Form Handling
function initContactForm() {
const contactForm = document.getElementById('contact-form');
if (contactForm) {
contactForm.addEventListener('submit', function(e) {
e.preventDefault();
// Get form data
const formData = new FormData(this);
const name = formData.get('name');
const email = formData.get('email');
const phone = formData.get('phone');
const service = formData.get('service');
const message = formData.get('message');
// Basic validation
if (!name || !email) {
showMessage('Por favor, preencha pelo menos nome e email.', 'error');
return;
}
// Email validation
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
showMessage('Por favor, insira um email válido.', 'error');
return;
}
// Show loading state
const submitButton = this.querySelector('button[type="submit"]');
const originalText = submitButton.textContent;
submitButton.classList.add('loading');
submitButton.textContent = 'Enviando...';
submitButton.disabled = true;
// Simulate form submission (replace with actual form handling)
setTimeout(() => {
// Create WhatsApp message
const whatsappMessage = createWhatsAppMessage(name, email, phone, service, message);
const whatsappUrl = `https://wa.me/5565981020342?text=${encodeURIComponent(whatsappMessage)}`;
// Reset form
this.reset();
// Reset button
submitButton.classList.remove('loading');
submitButton.textContent = originalText;
submitButton.disabled = false;
// Open WhatsApp
window.open(whatsappUrl, '_blank');
showMessage('Redirecionando para o WhatsApp para finalizar o contato...', 'success');
}, 1500);
});
}
}
// Create WhatsApp message from form data
function createWhatsAppMessage(name, email, phone, service, message) {
let whatsappMessage = `🎯 *NOVA SOLICITAÇÃO DE ORÇAMENTO*\n\n`;
whatsappMessage += `👤 *Nome:* ${name}\n`;
whatsappMessage += `📧 *Email:* ${email}\n`;
if (phone) {
whatsappMessage += `📱 *Telefone:* ${phone}\n`;
}
if (service) {
whatsappMessage += `🔧 *Serviço:* ${getServiceName(service)}\n`;
}
if (message) {
whatsappMessage += `💬 *Mensagem:* ${message}\n`;
}
whatsappMessage += `\n💼 *Empresa:* Consertaprint\n`;
whatsappMessage += `📅 *Data:* ${new Date().toLocaleDateString('pt-BR')}`;
return whatsappMessage;
}
// Get service name in Portuguese
function getServiceName(service) {
const services = {
'manutencao': 'Manutenção de Impressora',
'toners': 'Compra de Toners',
'locacao': 'Locação de Impressoras',
'orcamento': 'Orçamento Geral'
};
return services[service] || service;
}
// Show message to user
function showMessage(text, type) {
// Remove existing messages
const existingMessage = document.querySelector('.form-message');
if (existingMessage) {
existingMessage.remove();
}
// Create new message
const messageDiv = document.createElement('div');
messageDiv.className = `form-message ${type === 'success' ? 'success-message' : 'error-message'}`;
messageDiv.textContent = text;
// Insert after form
const form = document.getElementById('contact-form');
form.parentNode.insertBefore(messageDiv, form.nextSibling);
// Remove message after 5 seconds
setTimeout(() => {
if (messageDiv.parentNode) {
messageDiv.remove();
}
}, 5000);
}
// Initialize scroll animations
function initAnimations() {
// Intersection Observer for fade-in animations
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver(function(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('animate-fade-in-up');
observer.unobserve(entry.target);
}
});
}, observerOptions);
// Observe service cards, brand items, and other elements
const animatedElements = document.querySelectorAll('.bg-gray-700, .bg-gray-800');
animatedElements.forEach(el => {
observer.observe(el);
});
}
// Scroll effects
function initScrollEffects() {
let ticking = false;
function updateScrollEffects() {
const scrollY = window.scrollY;
const nav = document.querySelector('nav');
// Add/remove scrolled class to navigation
if (scrollY > 100) {
nav.classList.add('bg-gray-800/95');
nav.classList.remove('bg-gray-800/90');
} else {
nav.classList.add('bg-gray-800/90');
nav.classList.remove('bg-gray-800/95');
}
ticking = false;
}
function requestScrollUpdate() {
if (!ticking) {
requestAnimationFrame(updateScrollEffects);
ticking = true;
}
}
window.addEventListener('scroll', requestScrollUpdate);
}
// Phone number formatting
function formatPhoneNumber(input) {
// Remove all non-numeric characters
let value = input.value.replace(/\D/g, '');
// Apply Brazilian phone formatting
if (value.length <= 10) {
// Landline format: (XX) XXXX-XXXX
value = value.replace(/(\d{2})(\d{4})(\d{4})/, '($1) $2-$3');
} else {
// Mobile format: (XX) XXXXX-XXXX
value = value.replace(/(\d{2})(\d{5})(\d{4})/, '($1) $2-$3');
}
input.value = value;
}
// Add phone formatting to phone input
document.addEventListener('DOMContentLoaded', function() {
const phoneInput = document.getElementById('phone');
if (phoneInput) {
phoneInput.addEventListener('input', function() {
formatPhoneNumber(this);
});
}
});
// Utility function to handle external links
function handleExternalLinks() {
const externalLinks = document.querySelectorAll('a[target="_blank"]');
externalLinks.forEach(link => {
link.addEventListener('click', function() {
// Analytics tracking could go here
console.log('External link clicked:', this.href);
});
});
}
// Initialize external links handler
document.addEventListener('DOMContentLoaded', handleExternalLinks);
// Add keyboard navigation support
document.addEventListener('keydown', function(e) {
// ESC key closes mobile menu
if (e.key === 'Escape') {
const mobileMenu = document.getElementById('mobile-menu');
if (mobileMenu && !mobileMenu.classList.contains('hidden')) {
mobileMenu.classList.add('hidden');
const icon = document.querySelector('#mobile-menu-button i');
icon.setAttribute('data-feather', 'menu');
feather.replace();
}
}
});
// Performance optimization: Lazy load images when they come into view
function initLazyLoading() {
const images = document.querySelectorAll('img[data-src]');
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.classList.remove('lazy');
imageObserver.unobserve(img);
}
});
});
images.forEach(img => imageObserver.observe(img));
}
// Error handling
window.addEventListener('error', function(e) {
console.error('JavaScript error:', e.error);
// In production, you might want to send this to an error tracking service
});
// Service Worker registration for PWA capabilities (optional)
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
// navigator.registerServiceWorker('/sw.js')
// .then(function(registration) {
// console.log('SW registered: ', registration);
// })
// .catch(function(registrationError) {
// console.log('SW registration failed: ', registrationError);
// });
});
}