Второй модал с другим идентификатором открывается с другим эффектом. Почему? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть две разные ценовые карты:

    <div class="card card1" id="open">
      <span class=title>Basic</span>
      <h1>$99 USD</h1>
      <h4>Lorem ipsum dolor sit amet.</h4>
      <h2>YOU GET:</h2>
      <ul>
        <li>Access to AM</li>
        <li>Unlimited Households</li>
        <li>White-Labeling</li>
      </ul>
    </div>

    <div class="card card2" id="open2">
      <span class=title>Pro</span>
      <h1>$129 USD</h1>
      <h4>Lorem ipsum dolor sit amet.</h4>
      <h2>YOU GET:</h2>
      <ul>
        <li>Cash-Flow Reporting</li>
        <li>Beneficiary Visualization</li>
        <li>Unlimited TMs</li>
      </ul>
    </div>

При нажатии каждая из них должна вызывать разные модальные параметры:

    <div class="modal-container" id="modal_container">
      <div class="modal">
        <h1>Modal goes here</h1>
        <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Atque consectetur repudiandae quia deleniti nulla, suscipit tempora magnam blanditiis ex culpa mollitia quisquam quod? Dolores, sunt dicta adipisci rem consequuntur fugit repudiandae quia deleniti nulla.</p>
        <button id="close">Close me</button>
      </div>

      <div class="modal-container" id="modal_container2">
      <div class="modal">
        <h1>Modal 2 goes here</h1>
        <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Atque consectetur repudiandae quia deleniti nulla, suscipit tempora magnam blanditiis ex culpa mollitia quisquam quod? Dolores, sunt dicta adipisci rem consequuntur fugit repudiandae quia deleniti nulla.</p>
        <button id="close2">Close me</button>
      </div>

Все идентификаторы уникальны. С этим JS я могу вызвать первый модальный, но не второй:

const open = document.getElementById('open');
const modal_container = document.getElementById('modal_container');
const close = document.getElementById('close');

open.addEventListener('click', () => {
  modal_container.classList.add('show');
});

close.addEventListener('click', () => {
  modal_container.classList.remove('show');
});

Я добавил уникальные идентификаторы для второй карты и модального, но когда я потянул их в JS добавив это:

const open2 = document.getElementById('open2');
const modal_container2 = document.getElementById('modal_container2');
const close2 = document.getElementById('close2');

open2.addEventListener('click', () => {
  modal_container2.classList.add('show');
});

close2.addEventListener('click', () => {
  modal_container2.classList.remove('show');
});

Я не получаю тот же эффект. Вот соответствующий CSS: Добавлен соответствующий CSS

.modal-container {
  background-color: rgba(0,0,0,0.3);
  position: fixed;
  top:0;
  left:0;
  width: 100vw;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  pointer-events: none;
}

.modal-container.show {
  opacity: 1;
  pointer-events: auto;
}

1 Ответ

1 голос
/ 20 апреля 2020

произошла ошибка в вашем коде, тэг двойного открытия и закрытия тела, второй модал был внутри контейнера первого, идентификаторы были продублированы, а на стороне JS слушатели второго модала отсутствовали, попробуйте это:

const open = document.getElementById('open');
const modal_container = document.getElementById('modal_container');
const close = document.getElementById('close');
const open2 = document.getElementById('open2');
const modal_container2 = document.getElementById('modal_container2');
const close2 = document.getElementById('close2');

open.addEventListener('click', () => {
  modal_container.classList.add('show');
});

close.addEventListener('click', () => {
  modal_container.classList.remove('show');
});

open2.addEventListener('click', () => {
  modal_container2.classList.add('show');
});

close2.addEventListener('click', () => {
  modal_container2.classList.remove('show');
});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body  {
  background: #f4efed;
  font-family: 'Muli', sans-serif;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
  margin: 0;
  cursor: crosshair;
}

.card {
  background-color: #fff;
  border-radius: 10px;
  padding: 60px 30px;
  text-align: center;
  max-width: 450px;
  min-width: 275px;
  margin: 1em;
  transition: .2s ease all;
}

.card:hover {
  transform: translateY(-20px);
  box-shadow: 0 10px 20px rgba(0,0,0,.3);
  cursor: pointer;
}

.card1 {
  background-image: linear-gradient(to bottom right, #41464d, #2d3137);
  color: white;
}

.card2 {
  background-image: linear-gradient(to bottom right, #dbb898, #b98351);
  color: white;
}

.card .title {
  font-size: .8em;
}

.card1 .title{
  font-weight: bold;
  background-color: #444950;
  border-radius: 10px;
  padding: 12px 10px;
}

.card2 .title{
  font-weight: bold;
  background-color: white;
  border-radius: 10px;
  padding: 12px 10px;
  color: #2d3137;
}

h1 {
  margin: 30px 0 30px 0;
}

h4 {
  font-weight: 100;
  font-size: .75em;
}

h2 {
  margin: 25px;
  font-size: .8em;
}

ul {
  font-size: .75em;
  line-height: 1.75em;
  list-style: none;
}

.modal-container {
  background-color: rgba(0,0,0,0.3);
  position: fixed;
  top:0;
  left:0;
  width: 100vw;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  pointer-events: none;
}

.modal-container.show {
  opacity: 1;
  pointer-events: auto;
}

.modal {
  background-color: white;
  border-radius: 10px;
  width: 800px;
  max-width: 100%;
  padding: 30px 50px;
  box-shadow: 0 2px 4px rgba(0,0,0,0.2);
  text-align: center;
}

.modal h1 {
  margin: .5em;
}

.modal p {
 font-size: 14px;
  opacity: 0.7;
}

.modal-container button {
  background-color: #444950;
  color: white;
  border: 0;
  border-radius: 5px;
  box-shadow: 0 2px 4px rgba(0,0,0,0.2);
  font-size: 14px;
  padding: 10px 25px;
  margin: 15px 0;
}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Pricing Cards</title>
</head>
<body> 
    <div class="card card1" id="open">
      <span class=title>Basic</span>
      <h1>$99 USD</h1>
      <h4>Lorem ipsum dolor sit amet.</h4>
      <h2>YOU GET:</h2>
      <ul>
        <li>Access to Asset-Map</li>
        <li>Unlimited Households</li>
        <li>White-Labeling</li>
      </ul>
    </div>
    
    <div class="card card2" id="open2">
      <span class=title>Pro</span>
      <h1>$129 USD</h1>
      <h4>Lorem ipsum dolor sit amet.</h4>
      <h2>YOU GET:</h2>
      <ul>
        <li>Cash-Flow Reporting</li>
        <li>Beneficiary Visualization</li>
        <li>Unlimited Target-Maps</li>
      </ul>
    </div>
    
    <div class="modal-container" id="modal_container">
      <div class="modal">
        <h1>Modal goes here</h1>
        <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Atque consectetur repudiandae quia deleniti nulla, suscipit tempora magnam blanditiis ex culpa mollitia quisquam quod? Dolores, sunt dicta adipisci rem consequuntur fugit repudiandae quia deleniti nulla.</p>
        <button id="close">Close me</button>
      </div>
    </div>
      
    <div class="modal-container" id="modal_container2">
      <div class="modal">
        <h1>Modal 2 goes here</h1>
        <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Atque consectetur repudiandae quia deleniti nulla, suscipit tempora magnam blanditiis ex culpa mollitia quisquam quod? Dolores, sunt dicta adipisci rem consequuntur fugit repudiandae quia deleniti nulla.</p>
        <button id="close2">Close me</button>
      </div>
    </div>
    
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...