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

js - rozjaśnienie na elemencie sąsiadującym

Object Storage Arubacloud
0 głosów
426 wizyt
pytanie zadane 17 października 2017 w JavaScript przez MTB Użytkownik (690 p.)
Cześć, potrzebuję małej pomocy

Mam 2 buttony. Kiedy kliknę na jednego, to drugi ma mieć opacity: 0.5, a potem odwrotnie.

Struktura:

<div id="boxes">
                    <button type="button" id="firstBtn"  onclick="box(this)" ></button>
                    <button type="button" id="secondBtn"  onclick="box(this)"></button>          
    </div>

W jaki sposób mogę klikając na jeden element nadawać drugiemu opacity: 0.5, a po kolejnym kliknięciu w ten button który miał obniżone opacity ma mieć z powrotem 1,0. Chodzi mi o takie naprzemienne działanie.

4 odpowiedzi

+1 głos
odpowiedź 17 października 2017 przez Drajvon Bywalec (2,250 p.)
            <script>
                let btn1 = document.querySelector("#firstBtn");
                let btn2 = document.querySelector("#secondBtn");
                btn1.addEventListener('click', function(){
                    btn2.style.opacity = '0.5';
                    btn1.style.opacity = '1';
                });
                btn2.addEventListener('click', function(){
                    btn1.style.opacity = '0.5';
                    btn2.style.opacity = '1';
                });
            </script>

 

1
komentarz 17 października 2017 przez Drajvon Bywalec (2,250 p.)
edycja 17 października 2017 przez Drajvon

Ewentualnie jeśli chcesz dodać więcej przycisków to:

    <script>
        const buttonList = document.querySelector('#boxes');
        buttonList.addEventListener('click', (e) => {
            hide(e);
        });
        function hide(e) {
            e.stopPropagation();
            let target = e.target;
            let childrenList = Array.from(target.parentNode.children).filter(item => item !== target );
            childrenList.map(item => item.style.opacity = '0.5');          
            target.style.opacity = '1';
        }
    </script>
0 głosów
odpowiedź 17 października 2017 przez sc4rface Dyskutant (7,710 p.)
$(this).next()

$(this).prev()

Oto moja podpowiedź ;)

This dotyczy elementu, na którym został wywołany event.
komentarz 17 października 2017 przez MTB Użytkownik (690 p.)
Chodzi mi o rozwiązanie w czystym javascripcie, a nie jQuery:)
0 głosów
odpowiedź 17 października 2017 przez MTB Użytkownik (690 p.)
podbijam, jakieś propozycje?
1
komentarz 17 października 2017 przez Marchiew Dyskutant (7,690 p.)
https://codepen.io/anon/pen/mBabZX

Coś takiego zrobiłem. Działa, ale jest bardzo mało wydajne, bo podwójna pętla.

Za to działa dla dowolnej ilości przycisków i nie trzeba id podawać :)
2
komentarz 17 października 2017 przez elwood Gaduła (4,180 p.)
Bez sensu rozwiązanie. Jeżeli będziesz potrzebował 100 takich przycisków to stworzysz 100 listenerów? Klik powinien być dodany do nadrzędnego diva w tym wypadku do <div id="boxes"> Następnie sprawdzasz czy na pewno kliknięto button (nie diva), jeżeli tak to lecisz forEach'em po tych buttonach i ustawiasz odpowiednie classy.

https://jsfiddle.net/gc6tt2ra/
komentarz 17 października 2017 przez Marchiew Dyskutant (7,690 p.)
Wiedziałem od razu jak to powinno wyglądać i że mój skrypt jest bez sensu, ale nie wpadłem na szybko jak to wykonać i napisałem od tak :D

Dzięki za poprawę :)
komentarz 17 października 2017 przez Marchiew Dyskutant (7,690 p.)
Czytałem gdzieś, że forEach jest niezalecany i lepiej używać .map() i podobnych takich funkcji. Ile w tym jest prawdy, a ile przesady?
komentarz 17 października 2017 przez Tomek Sochacki Ekspert (227,510 p.)
zależy do czego, map zwraca nowa tablice a forEach nie.
komentarz 17 października 2017 przez elwood Gaduła (4,180 p.)
Dokładnie. Równie dobrze możesz użyć zwykłego for'a, czy innej pętli. Zaletą tego będzie możliwość jej przerwania, czego w forEach'u nie zrobimy.
0 głosów
odpowiedź 17 października 2017 przez MTB Użytkownik (690 p.)
Dziękuję wszystkim za odpowiedzi. Mam teraz materiał do rozkminy:)

Podobne pytania

0 głosów
1 odpowiedź 239 wizyt
pytanie zadane 13 września 2017 w HTML i CSS przez Radek Begej Użytkownik (580 p.)
+1 głos
1 odpowiedź 267 wizyt
0 głosów
2 odpowiedzi 394 wizyt
pytanie zadane 7 grudnia 2017 w JavaScript przez ajzyn Użytkownik (510 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!

...