Como crear un modal emerxente con JavaScript de cero

Neste tutorial, imos aprender a crear maneiras emerxentes con JavaScript (Windows de diálogo) sen usar un marco de traballo como Bootstrap ou A Biblioteca de terceiros. Crearemos todo desde cero, ofrecendo un control completo sobre como funciona e como se ve.

Aquí está o espectáculo que imos crear:

1. Comezar coa marca da páxina

primeiro creará un modal. Para facelo, engadiremos a clase .modal e unha identificación única a un recipiente. A continuación, imos especificar o diálogo axustando un elemento .modal-dialog como elemento secundario directo do .modal. O diálogo conterá o contido do MODAL. Pode ser calquera tipo de contido como texto, imaxes, caixas de luz, notificacións / alertas de usuario, etc.

“unha xanela de diálogo (ou modal) é un pequeno elemento Interface de usuario (UI) que aparece en primeiro plano nun sitio web, normalmente é activado como un aviso para que o usuario faga algo “- adi purdila

a Abre un modal, necesitaremos calquera elemento co atributo data-open (normalmente button). O valor deste atributo debe ser a identificación do modal desexado.

Por defecto, un modal pechará se facemos clic nos seus límites ou cando presionamos a tecla Pero tamén podemos pechalo se facemos clic en calquera elemento co atributo data-close (normalmente button).

Ao comezo, o modal aparecerá / desaparecerá cun efecto de desvanecemento. Pero temos a capacidade de axustar o efecto de animación de diálogo usando o atributo data-animation. o valor deste atributo que ten que ser engadido a .modal it pode ser calquera dos seguintes valores:

  • slideInOutTop
  • slideInOutLeft
  • slideInOutRight
  • zoomInOut
  • rotateInOutDown
  • mixInAnimations

Veremos máis de cerca estes valores nunha próxima sección.

Por agora, imos familiarizarnos coa marca que é necesaria para representar un só modal:

<button type="button" class="open-modal" data-open="modal1">...</button><div class="modal"> <div class="modal-dialog"> <header class="modal-header"> ... <button class="close-modal" aria-label="close modal" data-close>✕</button> </header> <section class="modal-content">...</section> <footer class="modal-footer">...</footer> </div></div>

2. Define algúns estilos básicos

co marcado preparado, configuraremos algúns Variables CSS e reiniciaremos os estilos:

:root { --lightgray: #efefef; --blue: steelblue; --white: #fff; --black: rgba(0, 0, 0, 0.8); --bounceEasing: cubic-bezier(0.51, 0.92, 0.24, 1.15);}* { padding: 0; margin: 0;}button { cursor: pointer; background: transparent; border: none; outline: none; font-size: inherit;}

Despois, imos enfocarse horizontalmente e contido vertical d E a páxina. Ademais, imos darlle algúns estilos ao botón responsable da apertura do modal:

/*CUSTOM VARIABLES HERE*/body { display: flex; align-items: center; justify-content: center; height: 100vh; font: 16px/1.5 sans-serif;}.btn-group { text-align: center;}.open-modal { font-weight: bold; background: var(--blue); color: var(--white); padding: .75rem 1.75rem; margin-bottom: 1rem; border-radius: 5px;}

Neste punto, centraremos a nosa atención nos estilos de O modal.

Cada modal terá as seguintes características:

  • será unha pantalla completa cunha posición fixa. É dicir, será visto como unha superposición que abarca todo o ancho e alto da xanela.
  • terá unha cor de fondo escuro.
  • estará escondido por defecto.
  • O diálogo estará centrado horizontal e vertical.
/*CUSTOM VARIABLES HERE*/.modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; display: flex; align-items: center; justify-content: center; padding: 1rem; background: var(--black); cursor: pointer; visibility: hidden; opacity: 0; transition: all 0.35s ease-in;}

O diálogo terá un ancho máximo e altura. A súa altura será do 80% da altura da xanela. Nos casos en que a súa altura supera ese valor, aparecerá unha barra de desprazamento vertical:

/*CUSTOM VARIABLES HERE*/.modal-dialog { position: relative; max-width: 800px; max-height: 80vh; border-radius: 5px; background: var(--white); overflow: auto; cursor: default;}

Finalmente, definiremos algúns estilos simples para cada unha das seccións de contido :

/*CUSTOM VARIABLES HERE*/.modal-dialog > * { padding: 1rem;}.modal-header,.modal-footer { background: var(--lightgray);}.modal-header { display: flex; align-items: center; justify-content: space-between;}.modal-header .modal-close { font-size: 1.5rem;}.modal p + p { margin-top: 1rem;}

3. Alternar o modal

Unha páxina pode ter máis dun modal .. Pero como se mencionou anteriormente, todos os modos estarán escondidos no inicio.

Abre o modal

Do mesmo xeito que unha páxina pode ter máis dun activador aberto (elementos co atributo ). Cada vez que fai clic nun activador, o modal asociado debe facerse visible cunha animación que aparece gradualmente (Fade-in). Lembre que o valor do atributo data-open debe coincidir coa identificación dun modal.

Aquí está o script que revela un modal:

e clases de CSS relevante:

.modal { visibility: hidden; opacity: 0; transition: all 0.35s ease-in;}.modal.is-visible { visibility: visible; opacity: 1;}

Pechar o modal

coa nosa implementación Unha vez que un modal só pode aparecer á vez (este código non admite modales aniñados). Como se mencionou na sección de marcación anterior, hai tres métodos dispoñibles para ocultalo cun efecto de desvanecemento (Fade-out).

Recapitamos.

Primeiro, premendo no elemento personalizado que está situado dentro do modal:

const closeEls = document.querySelectorAll("");const isVisible = "is-visible";for (const el of closeEls) { el.addEventListener("click", function() { this.parentElement.parentElement.parentElement.classList.remove(isVisible); });}

Segundo, premendo en calquera lugar fóra do modal:

const isVisible = "is-visible";document.addEventListener("click", e => { if (e.target == document.querySelector(".modal.is-visible")) { document.querySelector(".modal.is-visible").classList.remove(isVisible); }});

Neste caso, o modal (superposición) que se comporta como un peche xigante botón. Por este motivo, dálle a cursor: pointer.

Finalmente, presionando a tecla IV = “45968C3B6C” :

const isVisible = "is-visible";document.addEventListener("keyup", e => { if (e.key == "Escape" && document.querySelector(".modal.is-visible")) { document.querySelector(".modal.is-visible").classList.remove(isVisible); }});

é un bo momento para ver o que creamos ata agora:

O modal parece moi bo. Teña en conta que cada vez que facemos clic nun activador aberto, cobra o modal correspondente.

Tomemos outro paso e examine algunhas ideas para fomentar o seu diálogo.

4. Engade animacións ao

diálogo como indicamos antes, o comportamento por defecto do modal é o aspecto gradual (Fade-in) e esvaecido gradual (fade-out). Pero hai a opción de axustar o efecto de animación da xanela emerxente.

Xa creo que os efectos de animación suficientes que poderían usar como alternativa ao efecto de desvanecemento. Para facelo, simplemente ten que pasar o atributo a .modal.

Por exemplo, se o desexa O diálogo aparece cunha animación deslizante de esquerda a dereita, necesitará o efecto slideInOutLeft.

detrás de escenas, hai dúas regras que alcanzan esta animación:

/*CUSTOM VARIABLES HERE*/ .modal-dialog { opacity: 0; transform: translateX(-100%); transition: all 0.5s var(--bounceEasing);}.is-visible .modal-dialog { opacity: 1; transform: none; transition-delay: 0.2s;}

Comprobe o modal con este tipo de animación aquí:

Pode comprobar o resto das animacións mirando a pestana CSS de O proxecto de demostración final. Dependendo da complexidade das animacións, usei transicións de CSS ou animacións para crealas.

Tamén usei a función cubic-bezier() para axustar a función de tempo de todas as transicións. Se non che gusta o efecto de rebote que produce, non dubide en cambialo a algo máis suave a través da variable --bounceEasing CSS.

Mire a demostración final con todos os efectos Animación aquí:

Conclusión

Isto é todo, amigos! Durante este tutorial decatámosnos / decatámonos a crear diálogos personalizados de forma animada sen depender de calquera marco de front-end.

Espero que goces do resultado final e que a túa creación axudoulle a actualizar as túas habilidades dianteiras. Finalizar

Estar presente que non consideramos a accesibilidade, polo que se quere mellorar esta demostración, podería ser o seguinte paso.

Como sempre, grazas por ler!

Máis lecturas en ventás emerxentes

  • plugins de wordpress
    máis de 20 dos mellores complementos de WordPress para Windows emerxentes e opt-in
    nona blackman
  • ui deseño
    a mellor forma de usar Windows de diálogo (MODALS) no seu deseño web
    Adi purdila
  • WordPress
    Como crear espectaculares ventás emerxentes en WordPress con Element Pro
    Adi purPardila

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *