Поиск  
Always will be ready notify the world about expectations as easy as possible: job change page
Oct 31

Vanilla JavaScript modal with multiple open/close handlers

Vanilla JavaScript modal with multiple open/close handlers
Автор:
Источник:
Просмотров:
687

In this post I want to show how we can easily create a modal with vanilla JavaScript. It can have multiple open/close handlers thanks to querySelectorAll.

First of all lets create the HTML structure for our modal.

<div class="modal">
  <span class="modal-backdrop"></span>
  <div class="modal-content">
    <div class="modal-header">
      <h2 class="modal-title">Modal Title</h2><button class="close-modal">&times</button>
    </div>
    <div class="modal-body">
      <h3>Modal body</h3>
      <p>Modal body text</p>
    </div>
    <div class="modal-footer">
      <button class="close-modal">Ok</button>
      <button class="close-modal">Cancel</button>
    </div>
  </div>
</div>

Now lets add some style.

.modal {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
  padding: 2rem;
  position: fixed;
  width: 100%;
  top: 0;
  visibility: hidden;
  opacity: 0;
  transition: all 0.3s ease;
}
.modal .modal-backdrop {
  background: rgba(0, 0, 0, 0.7);
  height: 100%;
  width: 100%;
  position: fixed;
}
.modal .modal-content {
  background: #fff;
  border-radius: 5px;
  max-width: 600px;
  position: fixed;
  top: -100%;
  transition: all 0.6s ease;
  z-index: 1000;
}
.modal .modal-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-bottom: 1px solid #ccc;
  padding: 1.5rem;
}
.modal .modal-header .close-modal {
  font-size: 2rem;
  padding: 0;
  margin: 0;
  height: 30px;
  width: 30px;
  text-align: center;
}
.modal .modal-header .close-modal:hover {
  color: #000;
}
.modal .modal-body {
  padding: 1.5rem;
}
.modal .modal-footer {
  border-top: 1px solid #ccc;
  padding: 1rem;
  text-align: right;
}

Notice that 3 attributes on .modal class.

.modal {
  ...
  top: 0;
  visibility: hidden;
  opacity: 0;
}

It will keep the modal hidden by default, later we will use JavaScript to add a .visible class to make our modal appear on the screen.

Time to JavaScript

Finally lets write some JavaScript code to give interaction to the modal.

We begin finding what we need to interact in the DOM.

const modal = document.querySelector('.modal'),
      openHandlers = document.querySelectorAll('.open-modal'),
      closeHandlers = document.querySelectorAll('.close-modal');

Now we loop through our open and close handlers to add it a click eventListener.

openHandlers.forEach(openHandler => {
  openHandler.addEventListener('click', openModal)
});

closeHandlers.forEach(closeHandler => {
  closeHandler.addEventListener('click', closeModal)
});

We added a call to an open and and close functions when the click event gets fired. Lets create these two.

function openModal() {
  modal.classList.add('visible');
}

function closeModal() {
  modal.classList.remove('visible');
}

When our openModal function gets fired, we simply add a class .visible to the main .modal class.
So we can toggle its visibility with CSS.

.modal.visible {
  opacity: 1;
  visibility: visible;
}
.modal.visible .modal-content {
  top: 25%;
}

Notice the:

top: 25%

It's just to add some cool animation in out.

Thats all we need and our modal is ready.
Vanilla JavaScript is pretty easy nowadays, in the past it would be a pain in the ass to make such a simple thing.

Check the demo on codepen to see it in action.

Файлы

Похожее
20 марта
Автор: Наталья Кайда
Самые популярные языки, технологии, инструменты и архитектурные концепции. JavaScript – по-прежнему бесспорный лидер JavaScript вызывает сложные чувства у многих разработчиков, и по разным причинам: кому-то не хватает синтаксиса для явного определения типов, на кого-то наводят тоску async/await и промисы. Альтернативные...
Sep 11, 2023
Author: Artem A. Semenov
In today’s rapidly evolving web development landscape, selecting the right framework is crucial for delivering efficient, scalable, and maintainable applications. React and Blazor are two leading frameworks that have gained significant attention in recent years. As developers and businesses weigh...
Aug 15
The JavaScript fetch() method is used to fetch resources from a server. It returns a Promise that resolves to the Response object representing the response to the request. The fetch method can also make HTTP requests - GET request (to...
24 марта
JavaScript уже не первый год является самым популярным языком программирования для фронтенд-разработки. Но когда речь заходит о выборе фреймворка, то ориентироваться стоит не только на популярность, но и на потребности конкретного проекта. В 2023 году среди всех платформ на JS...
Написать сообщение
Тип
Почта
Имя
*Сообщение
RSS
Если вам понравился этот сайт и вы хотите меня поддержать, вы можете
Почему вы никогда не должны соглашаться на собеседования с программированием
«Великое увольнение» продолжается: теперь с работы уходят даже боссы
Soft skills: 18 самых важных навыков, которыми должен владеть каждый работник
5 приемов увеличения продуктивности разработчика
Зарплата по результатам собеседования — лучший способ сократить отклики на вакансию, а тестовые задания — избыточны
9 тяжёлых уроков, которые я усвоил за 18 лет разработки
8 вещей, которых не должен бояться разработчик
Рассуждение на тему, какую базу данных выбирать
Scrum: 12 терминов, которые нужно запомнить
Hangfire — планировщик задач для .NET
LinkedIn: Sergey Drozdov
Boosty
Donate to support the project
GitHub account
GitHub profile