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

question-closed dziwny efekt w javascript

Object Storage Arubacloud
0 głosów
195 wizyt
pytanie zadane 18 czerwca 2015 w JavaScript przez niezalogowany
zamknięte 18 czerwca 2015

Witam

Mam taki dziwny efekt w JS i nie wiem gdzie szukać błędu.

Otwieram sobie swoja stronkę ze sliderem (zmiana obrazka przy pomocy js):

wszystko jest ok do momentu gdy otworzę drugą zakładkę w przeglądarce

gdy poprzeglądam stronki i powrócę na stronkę ze sliderem to slider dziwnie miga (nie zmienia płynnie obrazka), gdy odświeżę stronkę to ten efekt mija i znowu jest wszystko ok.

<script>
window.onload = img_replace;

function img_replace()
	{
	var div = document.getElementById("div_ani");
	
	div.style.backgroundImage = "url('img/baner.png')";

	var interwal_id;
	z = 0;

	interwal_id = setInterval(function ()
                {

		//--- sciemnianie
		var interwal2_id;
		var i = 9;
		interwal2_id = setInterval(function ()
                	{
			div.style.opacity = "0." + i;
			i--;
			if(i <= -1 ) clearInterval(interwal2_id);
			}, 20);

		//--- zmiana pozycji tla
		setTimeout(function(){
			div.style.backgroundPosition = "0 " + z + "px";
 		}, 500);

		
		//--- rozjasnianie
		
		setTimeout(function(){
			var interwal3_id;
                	interwal3_id = setInterval(function ()
                        	{
                        	div.style.opacity = "0." + i;
                        	i++;
                        	if(i >= 10 ) clearInterval(interwal3_id);
                        	}, 20);
			}, 1000);
                z-=200;
		if (z <= -1400) z = 0; //--zerowanie licznika
                }, 10000);
	}

</script>

a to adres stronki:

http://sfagnieszka.eu/

EDIT

Zauważyłem, że efekt taki występuje tylko gdy obrazek się zmieni a ja mam akurat włączoną inną zakładkę

 

komentarz zamknięcia: problem rozwiązany

1 odpowiedź

+1 głos
odpowiedź 18 czerwca 2015 przez Comandeer Guru (601,530 p.)
wybrane 18 czerwca 2015
 
Najlepsza

Czemu to nie jest pociągnięte na jednym setTimeout? Całość jest strasznie przekombinowana

Co do problemu: przeglądarka wstrzymuje wszystkie timery na stronie, która nie jest obecnie przeglądana. Być może w Twoim przypadku takie wstrzymanie i następnie wznowienie prowadzi do desynchronizacji tych timerów (bo na pewno będzie ich więcej niż jeden w ruchu), stąd takie miganie.

Moim zdaniem skrypt oparty tylko na jednym timerze działałby o wiele płynniej.

komentarz 18 czerwca 2015 przez niezalogowany
div.classList.toggle('div_ani_hidden');
div.style.backgroundPosition = "0 " + z + "px";
div.classList.toggle('div_ani_show');

Wyskrobałem coś takiego ale ucieka synchronizacja, w ogóle jakoś dziwnie to funkcjonuje

To link do kopii strony:

http://sfagnieszka.eu/ppp/

komentarz 18 czerwca 2015 przez Comandeer Guru (601,530 p.)
Podeślij mi tą stronę zipem to to skombinuję na dzisiaj/jutro
komentarz 18 czerwca 2015 przez niezalogowany

dodanie zdarzenia:

<script>
window.onload = img_replace;

function img_replace()
        {
        var div = document.getElementById("div_ani");
        div.addEventListener("transitionend", ppp, false);
        var interwal_id;
        z = 0;

        function ppp()
                {
                div.classList.remove('div_ani_hidden');

                }

        interwal_id = setInterval(function ()
                {

                div.classList.add('div_ani_hidden');
                div.style.backgroundPosition = "0 " + z + "px";

                z-=200;
                if (z <= -1400) z = 0; //--zerowanie licznika
                }, 10000);
        }

</script>

wygasza się kiedy chce :)

komentarz 18 czerwca 2015 przez niezalogowany
dzięki nie trzeba, myślałem, że problem jest prostszy

PS nie chcę abyś odwalał za mnie robotę

jeszcze się pomęczę :D
komentarz 18 czerwca 2015 przez niezalogowany

Chyba zrobione :)

<script>
window.onload = img_replace;

function img_replace()
        {
        var div = document.getElementById("div_ani");
        div.addEventListener("transitionend", ppp, false);
        var interwal_id;
        z = 0;

        function ppp()
                {
                div.classList.remove('div_ani_hidden');
                div.style.backgroundPosition = "0 " + z + "px";
                }

        interwal_id = setInterval(function ()
                {

                div.classList.add('div_ani_hidden');
//              div.style.backgroundPosition = "0 " + z + "px";

                z-=200;
                if (z <= -1400) z = 0; //--zerowanie licznika
                }, 10000);
        }

</script>

Problem leżał w zmianie pozycji tła diva

Jednak twoja pomoc okazała się bardzo cenna (dzięki tobie wiem jak obsługiwać zdarzenia css3)

:D

Podobne pytania

0 głosów
1 odpowiedź 235 wizyt
0 głosów
2 odpowiedzi 226 wizyt
pytanie zadane 30 grudnia 2017 w JavaScript przez Sandwitch Użytkownik (630 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...