• 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

Object Storage Arubacloud
0 głosów
183 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ź 684 wizyt
pytanie zadane 12 marca 2018 w JavaScript przez Vorex444 Dyskutant (9,610 p.)
0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 26 listopada 2017 w JavaScript przez Vorex444 Dyskutant (9,610 p.)
0 głosów
1 odpowiedź 675 wizyt
pytanie zadane 4 października 2017 w JavaScript przez Vorex444 Dyskutant (9,610 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...