main.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // CONFIGURATION NAVBAR
  2. const header = document.querySelector(".main-header");
  3. const topTop = document.querySelector(".to_top");
  4. window.addEventListener("scroll", () => {
  5. const scrollPos = window.scrollY;
  6. if (scrollPos > 10) {
  7. header.classList.add("scrolled");
  8. topTop.classList.add("active");
  9. } else {
  10. header.classList.remove("scrolled");
  11. topTop.classList.remove("active");
  12. }
  13. })
  14. const navItems = document.querySelectorAll(".main-header > .nav-links > .nav-link");
  15. const menuBtn = document.getElementById("menu-btn");
  16. navItems.forEach(item => {
  17. item.addEventListener('click', function() {
  18. menuBtn.checked = false
  19. });
  20. });
  21. // CONFIGURATION FORM
  22. const form = document.getElementById("contactForm");
  23. const fields = {
  24. nombre: false,
  25. email: false,
  26. mensaje: false
  27. }
  28. const expresiones = {
  29. nombre: /^.{4,30}$/,
  30. email: /^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/
  31. }
  32. const loader = document.querySelector(".contact-form-loader");
  33. const inputs = document.querySelectorAll("input:not([type='submit']), textarea");
  34. const inputSubmit = document.querySelector("input[type='submit']")
  35. const validateForm = (e) => {
  36. switch (e.target.name) {
  37. case "nombre":
  38. validateField(expresiones.nombre, e.target, 'nombre');
  39. break;
  40. case "email":
  41. validateField(expresiones.email, e.target, 'email');
  42. break;
  43. case "mensaje":
  44. if (e.target.value.length === 0) {
  45. document.querySelector("textarea[name='mensaje'] + .formulario__input-error").classList.remove('none')
  46. fields.mensaje = false;
  47. } else {
  48. document.querySelector("textarea[name='mensaje'] + .formulario__input-error").classList.add('none')
  49. fields.mensaje = true;
  50. }
  51. break;
  52. }
  53. }
  54. const validateField = (expresion, input, field) => {
  55. if (expresion.test(input.value)) {
  56. document.querySelector(`input[name='${field}']`).classList.remove('input__border-error')
  57. document.querySelector(`input[name='${field}'] + .formulario__input-error`).classList.add('none')
  58. fields[field] = true;
  59. } else {
  60. document.querySelector(`input[name='${field}']`).classList.add('input__border-error')
  61. document.querySelector(`input[name='${field}'] + .formulario__input-error`).classList.remove('none')
  62. fields[field] = false;
  63. }
  64. }
  65. inputs.forEach((input) => {
  66. input.addEventListener('keyup', validateForm);
  67. input.addEventListener('blur', validateForm);
  68. });
  69. form.addEventListener('submit', (e) => {
  70. e.preventDefault();
  71. if (fields.nombre && fields.email && fields.mensaje) {
  72. inputSubmit.disabled = true;
  73. inputSubmit.value = "Enviando...";
  74. const serviceID = 'default_service';
  75. const templateID = 'template_ab3seev';
  76. emailjs.sendForm(serviceID, templateID, document.getElementById("contactForm"))
  77. .then(() => {
  78. inputSubmit.value = 'Enviar';
  79. document.querySelector(".contact-form-response").classList.remove('none');
  80. form.reset();
  81. }, (err) => {
  82. inputSubmit.value = 'Enviar';
  83. // console.log(JSON.stringify(err));
  84. });
  85. }
  86. });