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

bootstrap progress-bar. Jak zmienić kolor dynamicznie?

Object Storage Arubacloud
+1 głos
346 wizyt
pytanie zadane 2 lipca 2017 w HTML i CSS przez pysilla Użytkownik (560 p.)

Chciałabym, żeby paski postępu z bootstrapa zmieniały swój kolor dynamicznie. Przy przekroczeniu powiedzmy 60% kolor z ustalonego (w momencie przekroczenia) zmienia się na czarny (paski są dynamiczne, "ładują się"). To moje pierwsze kroki z javascriptem, jquery i mam problem. Pod spodem kod, którego próbowałam. Niestety kolor zmienia się na czarny od razu w momencie startu, a do tego z jakiegoś powodu obejmuje wszystkie paski, nawet te, które nie mają przekroczonych 60%. Będę wdzięczna za pomoc.

 

 <div class="progress">
                    <div class="progress-bar" role="progressbar" aria-valuenow="70" aria-valuemin="0" aria-valuemax="100">
                        HTML5/CSS3
                    </div>
                </div>
                <div class="progress">
                    <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100">
                        BOOTSTRAP
                    </div>
                </div>
                <div class="progress">
                    <div class="progress-bar" role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100">
                        JAVASCRIPT(JQUERY)
                    </div>
                </div>

                <div class="progress">
                    <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100">
                        RWD
                    </div>
                </div>
                <div class="progress">
                    <div class="progress-bar" role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100">
                        WORDPRESS
                    </div>
                </div>

 

 

 

var progressBar=$('.progress-bar');
var breakpoint= $('.progress-bar').attr('aria-valuenow');

if (breakpoint >=60){
    $(".progress-bar").css('background-color', 'black');
}

 

1 odpowiedź

0 głosów
odpowiedź 2 lipca 2017 przez Krzysztof Drozdowski Użytkownik (830 p.)

Hej,

fajną, szybką łamigłówkę mi zadałaś :D ogólnie zrobiłbym to tak:

HTML:

  <div class="progress">
    <div class="progress-bar" role="progressbar" aria-valuenow="70" aria-valuemin="0" aria-valuemax="100" style="width: 70%;">
      HTML5/CSS3
    </div>
  </div>
  <div class="progress">
    <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;">
      BOOTSTRAP
    </div>
  </div>
  <div class="progress">
    <div class="progress-bar" role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" style="width: 30%;">
      JAVASCRIPT(JQUERY)
    </div>
  </div>

  <div class="progress">
    <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;">
      RWD
    </div>
  </div>
  <div class="progress">
    <div class="progress-bar" role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" style="width: 30%;">
      WORDPRESS
    </div>
  </div>

Jak widzisz dodałem sobie width'y, żeby sprawdzać czy wizualnie się zgadza i faktycznie zmienia kolor.

Dodatkowo dodałem CSS'y: 

  <style>
    .progress-bar-red {
      background-color: red !important;
    }

    .progress-bar-black {
      background-color: black !important;
    }
  </style>

i to co nas interesuje najbardziej, czyli js:

  <script type="text/javascript">
    $(function() {
      var elementy = document.getElementsByClassName('progress-bar');
      for (var i = 0; i < elementy.length; ++i) {
        var progressBar = elementy[i];
        var breakpoint = $(elementy[i]).attr('aria-valuenow');
        if (breakpoint >= 60) {
          $(progressBar).addClass("progress-bar-black");
        } else {
          $(progressBar).addClass("progress-bar-red");
        }
        console.log(breakpoint);
        console.log(progressBar);
      }


    });
  </script>

Jak widzisz rozwiązałem to zadanie na tablicach. Twoje rozwiązanie miało jedną, zasadniczą wadę - pobierało wartość pierwszego elementu o danej klasie i kolorowało wszystkie progress-bary właśnie na podstawie wartości z 1 elementu. U mnie zauważysz pętle, która pobiera wartość valuenow dla każdego elementu o danej klasie po kolei, przyrównuje czy jest większy, bądź równy 60. Jeżeli tak to dodaje klasę, która zmienia kolor - kolory można też zmieniać tak jak to zrobiłaś u siebie, po prostu do swojego sposobu już się przyzwyczaiłem :) Jeżeli nie jest większy niż 60 to bar dostaje kolor czerwony.

Absolutnie nie jestem żadnym zawodowcem w tej dziedzinie i domyślam się, że moje rozwiązanie też nie jest idealne :D Jeżeli coś jest dla Ciebie dalej niejasne to zapraszam do zadawania pytań - odpowiem w miarę możliwości :D

komentarz 3 lipca 2017 przez pysilla Użytkownik (560 p.)
Bardzo szczegółowo wszystko wytłumaczyłeś, więc wszystko jest jasne! Bardzo dziękuję :) Nie jest to jednak do końca takie rozwiązanie jak chciałam, chociaż i tak satysfakcjonujące. Zależało mi żeby paski zaczynały od tego samego koloru, po czym te które przekraczają wartość 60%, gładko zmieniały kolor na inny. Mimo wszystko dzięki za odzew, bo Twoje rozwiązanie i tak jest  bardzo pomocne :)

Podobne pytania

0 głosów
1 odpowiedź 127 wizyt
pytanie zadane 8 października 2020 w HTML i CSS przez napoludniestad.pl Użytkownik (960 p.)
0 głosów
0 odpowiedzi 114 wizyt
0 głosów
1 odpowiedź 405 wizyt
pytanie zadane 23 listopada 2016 w HTML i CSS przez hiper007 Stary wyjadacz (11,270 p.)

92,563 zapytań

141,413 odpowiedzi

319,590 komentarzy

61,948 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!

...