• 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

Mały hosting, OGROMNE możliwości
0 głosów
265 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 453 wizyt
0 głosów
1 odpowiedź 902 wizyt
pytanie zadane 25 stycznia 2021 w JavaScript przez Mlorism Użytkownik (580 p.)
0 głosów
1 odpowiedź 656 wizyt
pytanie zadane 27 stycznia 2019 w JavaScript przez Próbny Nowicjusz (200 p.)

93,718 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,265 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...