• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Photo Zoom, co zamiast e.target

Cloud VPS
0 głosów
347 wizyt
pytanie zadane 26 grudnia 2017 w JavaScript przez Vorex444 Dyskutant (9,610 p.)

Cześć tworzę sobie galerię itd.

Zawsze gdy chciałem aby po kliknieciu w coś o podanym id się wydarzyło pisałem document.addEv.. if(e.target.id === 'nazwa'), dla wielu tych samych objektów, ale dowiedziałem się ze to nie jest do konca dobre i teraz tworzę coś co wymaga ode mnie albo użycia tego albo innego i zastanwiam się jak to inaczej zrobić aby nie tylko pierwsze zdjecie sie powiekszało ale i wszystkie tak jak był uzył e.target

var zoom = document.getElementById('zoom');
var body = document.querySelector('body');

var photoZoom = function() {
    //Pobieram ścieżkę pliku
    var thisImgSrc = this.getAttribute('src');
    //Tworzę diva w którym umiesze to zdjęcie
    var divPhoto = document.createElement('div');
    divPhoto.classList.add('photoZoom');
    //Dodaję do niego zdjęcie
    divPhoto.innerHTML = "<img src='" + thisImgSrc + "'>";
    body.appendChild(divPhoto);
    
    var divPhoto = document.querySelector('.photoZoom');
    var exit = function() {
        body.removeChild(divPhoto);
    };
    
    divPhoto.addEventListener('click', exit);
};

zoom.addEventListener('click', photoZoom);
   <div class="container">
        <div class="cont-img">
            <img src="img/1.jpeg" alt="1" id="zoom">
        </div> 
        <div class="cont-img">
            <img src="img/2.jpg" alt="2">
        </div> 
        <div class="cont-img">
            <img src="img/3.jpg" alt="3">
        </div> 
        <div class="cont-img">
            <img src="img/1.jpeg" alt="1">
        </div> 
        <div class="cont-img">
            <img src="img/2.jpg" alt="2">
        </div> 
        <div class="cont-img">
            <img src="img/3.jpg" alt="3">
        </div> 
    </div>

 

2 odpowiedzi

+2 głosów
odpowiedź 26 grudnia 2017 przez Fenix Nałogowiec (26,750 p.)

Może zamiast dodawać id, użyj class'y np. "call-to-zoom".

Wtedy zamiast:

var zoom = document.getElementById('zoom');

Użyj

var zoom = document.querySelectorAll('.call-to-zoom');

Aby następnie użyć pętli for, do umocowania EventListener'a do każdego wybranego obiektu. Następnie przesyłasz event do funkcji, używajac .target odnosisz się do obiektu na którym został wykonany event. I dalej to już sobie pracujesz na tym obiekcie. W Twoim wypadku pobranie src + dodanie classy. 

 

komentarz 26 grudnia 2017 przez ScriptyChris Mędrzec (190,190 p.)

Po co podpinać wiele event listenerów, skoro można podpiąć jeden do wspólnego przodka wszystkich tych elementów i tylko sprawdzać w co kliknięto? Tak jak napisał @niezalogowany - event delegation.

komentarz 26 grudnia 2017 przez Fenix Nałogowiec (26,750 p.)
Oczywiście że można, ale bind ma lepszy performance w stosunku do delegation.
komentarz 26 grudnia 2017 przez ScriptyChris Mędrzec (190,190 p.)
Jaki bind?
komentarz 26 grudnia 2017 przez Fenix Nałogowiec (26,750 p.)
Bind tzn powiązenie elementu z listenerem.
komentarz 27 grudnia 2017 przez ScriptyChris Mędrzec (190,190 p.)
Jaka jest różnica w szybkości pomiędzy bezpośrednim podłączeniem listenera, a delegacją zdarzenia? Jakiś test, link do artykułu?
+2 głosów
odpowiedź 26 grudnia 2017 przez niezalogowany

Zawsze gdy chciałem aby po kliknieciu w coś o podanym id się wydarzyło pisałem document.addEv.. if(e.target.id === 'nazwa'), dla wielu tych samych objektów, ale dowiedziałem się ze to nie jest do konca dobre

Wszystko rozchodzi się o to, aby podpiąć event raz, a później tylko sprawdzać w co kliknął użytkownik. Poczytaj o event delegation

Podobne pytania

0 głosów
1 odpowiedź 875 wizyt
pytanie zadane 12 marca 2018 w JavaScript przez Vorex444 Dyskutant (9,610 p.)
0 głosów
1 odpowiedź 270 wizyt
pytanie zadane 26 listopada 2017 w JavaScript przez Vorex444 Dyskutant (9,610 p.)
0 głosów
1 odpowiedź 844 wizyt
pytanie zadane 4 października 2017 w JavaScript przez Vorex444 Dyskutant (9,610 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,838 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...