// Efeito máquina de escrever no H1 do banner function typeWriter(elemento) { const textoArray = elemento.innerHTML.split(''); elemento.innerHTML = ''; textoArray.forEach((letra, i) => { setTimeout(() => elemento.innerHTML += letra, 75 * i); }); } setInterval(() => typeWriter(titulo), 10000); const titulo = document.getElementById("text"); typeWriter(titulo); // carrosel class SlideStories { constructor(id) { this.slide = document.querySelector(`[data-slide="${id}"]`); this.active = 0; this.init(); } activeSlide(index) { this.active = index; this.items.forEach((item) => item.classList.remove('active')); this.items[index].classList.add('active'); this.thumbItems.forEach((item) => item.classList.remove('active')); this.thumbItems[index].classList.add('active'); this.autoSlide(); } prev() { if (this.active > 0) { this.activeSlide(this.active - 1); } else { this.activeSlide(this.items.length - 1); } } next() { if (this.active < this.items.length - 1) { this.activeSlide(this.active + 1); } else { this.activeSlide(0); } } addNavigation() { const nextBtn = this.slide.querySelector('.slide-next'); const prevBtn = this.slide.querySelector('.slide-prev'); nextBtn.addEventListener('click', this.next); prevBtn.addEventListener('click', this.prev); } addThumbItems() { this.items.forEach(() => (this.thumb.innerHTML += ``)); this.thumbItems = Array.from(this.thumb.children); } autoSlide() { clearTimeout(this.timeout); this.timeout = setTimeout(this.next, 5000); } init() { this.next = this.next.bind(this); this.prev = this.prev.bind(this); this.items = this.slide.querySelectorAll('.slide-items > *'); this.thumb = this.slide.querySelector('.slide-thumb'); this.addThumbItems(); this.activeSlide(0); this.addNavigation(); } } new SlideStories('slide'); // validador de formulários let formValidator = { handleSubmit:(event)=>{ event.preventDefault(); //previne que envie let send = true; let inputs = form.querySelectorAll('input'); formValidator.clearErrors(); for(let i=0; i { // verificando as regras let rules = input.getAttribute('data-rules'); if(rules !== null) { rules = rules.split('|'); for(let k in rules) { let rDetails = rules[k].split('='); switch(rDetails[0]) { case 'required': if(input.value == '') { return 'Este campo é obrigatório!' } break; case 'email': //validação de email if(input.value != '') { let regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; if(!regex.test(input.value.toLowerCase())) { return 'E-mail digitado não é válido!'; } } } } } return true; }, showError:(input, error) => { input.style.borderColor = '#FF0000'; let errorElement = document.createElement('div'); errorElement.classList.add('error'); errorElement.innerHTML = error; input.parentElement.insertBefore(errorElement, input); /* Caso queira o erro abaixo do input: input.parentElement.insertBefore(errorElement, input.ElementSibling); */ }, clearErrors:() => { let inputs = form.querySelectorAll('input'); // remove as bordas for(let i=0; i