Użycie wielu modali na stronie

0

Hej,
na poczatku zaznaczam, ze nie miałem nigdy styczności z JavaScript. Buduję sobie stronę, wykorzystuję wszelkie poradniki i na ogół to wystarcza.
Mam jednak drobny problem, bardziej dotyczący "jak coś zrobić, żeby było względnie prawidłowo" a nie "dlaczego nie działa".
Chciałbym umieścić kilka popup modal 'i- klikam na stronie w kolejne wiersze - i zależnie w który wiersz klikę - taki modal ma mi się pokazać.
Pracuję na podstawie tego poradnika:
https://sabe.io/tutorials/how-to-create-modal-popup-box

Kwestia polega na tym, że wykorzystując:

// Popup modal
    var modal_pop = document.querySelector(".modal_pop");
    var trigger = document.querySelector(".trigger");
    var closeButton = document.querySelector(".close-button");

    function toggleModal() {
        modal_pop.classList.toggle("show-modal");
    }

    function windowOnClick(event) {
        if (event.target === modal_pop) {
            toggleModal();
        }
    }

    trigger.addEventListener("click", toggleModal);
    closeButton.addEventListener("click", toggleModal);
    window.addEventListener("click", windowOnClick);

Teoretycznie mogę kilkukrotnie przekopiować powyższy kod, zmienić nazwy zmiennych i przypisać konkretne zmienne do obszarów w htmlu.

Jednak no, nie podoba mi się takie rozwiązanie.
Myślałem, żeby np. stworzyć kilka zmiennych modal trigger oraz close_button - przypisać je do odpowiednich fragmentów html, natomiast w funkcji toggleModal pobierać modal jako argument i wówczas zmieniać jego stan.
Jest taka możliwość?

Edit:
Natomiast funkcja windowOnClick(event) powinna gasić każdy z otwartych modali. Nie znalazłem jednak funkcji zamykającej modal.(samo toggle niestety nie pomoże)

0

A nie lepiej skorzystać z gotowych modali w bootstrapie?

0

No jest to jakieś rozwiązanie.
Ale jednak chyba wolałbym rozwinąć swoje :D
Kwestia tylko tego co pisałem wcześniej, czy jest możliwość pobrania modalu jako argument funkcji?

3

Zasadniczo dobrze kombinujesz - można (a nawet powinno się) kod skracać, a wszystkie powtarzalne fragmenty wydzielać do osobnych funkcji. Oczywiście, jakbyś skopiował sobie X razy ten sam kod i jedynie zmienił w nim odwołania do konkretnych modali, to by też działało, ale by to było dziadostwo straszne ;)

Czym jest ten Twój "modal" o którym kilka razy wspominałeś? Zajrzałem w podany przez Ciebie link i widać tam wyraźnie, że

  1. modal to jest <div class="modal">
  2. jest on ukryty, ponieważ w CSS posiada wpisane visibility: hidden;
  3. po wciśnięciu klawisza zostaje wykonane modal.classList.toggle("show-modal"); czyli do modala zostaje "dodany" styl o nazwie "show-modal", w którym jest visibility: visible;, czyli w dużym uproszczeniu - usuwamy ukrycie określone w pkt. 2

Zauważ, że tutaj jedynym elementem, który wyróżnia/wskazuje modal jest klasa "modal". Elementów HTML z przypisaną daną klasą może być dowolna ilość, więc musimy zrobić coś innego. Oczywiście wymaga to troszkę zabawy, nie zrobię teraz tego za Ciebie, ale pokażę drogę ;) Będziesz musiał trochę zmienić HTML, CSS i JS, ale myślę, że dasz radę. W każdym razie - powinieneś dodać do każdego modalu coś w stylu id="modal1", id="modal2" itp., uruchamiając funkcję pokazującą/ukrywającą dany modal musisz przekazać to ID do niej, a potem dobrać się do konkretnego elementu. Najprościej będzie Ci skorzystać z https://developer.mozilla.org/pl/docs/Web/API/Document/getElementById. Pamiętaj, że ID musi być unikatowe w skali dokumentu HTML, więc korzystając z tego parametru masz pewność, że wskazujesz dany element.

0 użytkowników online, w tym zalogowanych: 0, gości: 0