// 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