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

Problem z .on(load) i ładowaniem zdjęć gdy zdjęcia są w cache

Object Storage Arubacloud
0 głosów
128 wizyt
pytanie zadane 2 kwietnia 2020 w JavaScript przez mil Nowicjusz (160 p.)

Witam wszystkich forumowiczów. Tak jak w tytule mam problem :)

Efekt ma być takie, że najpierw pokazuje się pasek postępu a gdy wszystkie zdjęcia są załadowane pasek postępu znika i pojawia się pierwsze zdjęcie.

Mam taki kod.

$(function () {
   var count = $('.newsSliderPhotoBoxes').find('img[data-i]').length;
   var step = 100 / count;
   step = step.toFixed(2);
   var pr = 0;
   $('.newsSliderPhotoBoxes').find('img[data-i]').on('load', function () {
      count--;
      pr = (countsum - count) * step;
      pr = pr.toFixed(0);
      $('.progressComplete').width(pr + '%');
      $('.progressCompleteText').html(pr + '%');
      if (count == 0) {
         $('.progressBar').animate({
            opacity: 0
         }, 500);
         $('.newsSliderPhotoBoxes').find('img[data-i=1]').animate({
            opacity: 1
         }, 500);
      }
   })
})

Problem dotyczy zachowania funkcji .on(load). Wszystko działa prawidłowo w momencie pierwszego ładowania strony. Gdy przejdziemy na podstronę i wrócimy z powrotem .on(load) się nie uruchamia.

Co jest przyczyną? Zakładam że chodzi o zdjęcia, które zostały raz załadowane i znajdują się w cache. Jak spowodować aby .on(load) działał zawsze?

Przejrzał masę stron, analizowałem gotowe skrypty i nie mam pojęcia jak sobie z tym poradzić.

komentarz 4 kwietnia 2020 przez cani Bywalec (2,060 p.)
Uźywasz AJAX'a żeby przechodzić na podstrony i z powrotem?
komentarz 4 kwietnia 2020 przez mil Nowicjusz (160 p.)
przeniesione 5 kwietnia 2020 przez ScriptyChris
Nie. Normalnie. Przeglądarka się przeładowuje...

1 odpowiedź

0 głosów
odpowiedź 9 kwietnia 2020 przez mil Nowicjusz (160 p.)

Problem rozwiązany. .on('load') nie jest dobrym rozwiązaniem dlatego inaczej to zapisałem

Funkcja ładująca zdjęcia i generująca pasek postępu

function loadArticle(content) {
        var r = $.Deferred();
        var count = content.find('img').length;
        var loaded = 0;
        var step = 100 / count;
        step = step.toFixed(2);
        var pr = 0;
        var i = 0;
        var img = new Array();
        content.find('img').each(function () {
            var src = $(this).attr('src')
            img[i] = new Image();
            img[i].src = src;
            img[i].onload = function () {
                loaded++;
                pr = loaded * step;
                pr = pr.toFixed(0);
                $('.progressComplete').width(pr + '%');
                $('.progressCompleteText').html(pr + '%');
            }
            img[i].onerror = function () {
                count--
            };
            i++
        })
        var interval = setInterval(function () {
            if (loaded == count) {
                $('.progressBar').animate({
                    opacity: 0
                }, 500);
                setTimeout(function () {
                    clearInterval(interval); // stop the interval
                    r.resolve();
                }, 100)
            }
        })
        return r;
    }

Wywołanie funkcji

$('.ProjectImages').append('<div class="progressBar"><span class="progressCompleteText">0%</span><div class="progressComplete"></div></div>');
    loadArticle($('.ProjectImagesContent')).done(function () {
        $('.ProjectImages').find('.progressBar').remove();
        $('.ProjectImagesContent').animate({
            opacity: '1'
        }, 500);
    })

Mam nadzieje, że komuś się moje rozwiązanie przyda

Podobne pytania

0 głosów
2 odpowiedzi 191 wizyt
0 głosów
1 odpowiedź 458 wizyt
pytanie zadane 25 stycznia 2021 w JavaScript przez Mlorism Użytkownik (580 p.)
0 głosów
1 odpowiedź 484 wizyt
pytanie zadane 27 stycznia 2019 w JavaScript przez Próbny Nowicjusz (200 p.)

92,584 zapytań

141,434 odpowiedzi

319,671 komentarzy

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

...