[Javascript] Cambiare colore sfondo div allo scroll del mouse

Jonn

Utente Attivo
29 Dic 2012
352
3
18
Pistoia
Ciao,
dopo un bel po di tempo di inattività sul forum mi rifaccio vivo :elvis:

Sto lavorando ad un sito web nel quale ho un menu fatto a barra posizionato sul top della finestra.
Questo menu ha "position: fixed" di modo che quando scorro la pagina questo mantiene la sua posizione ed è sempre visualizzato,
ieri ho trovato uno script (JS) che mi consente di cambiare il colore dello sfondo allo scrolling del mouse, lo script funziona ma solo in parte:
Il JS dichiara la variabile scrolled e la inizializza con FALSE poi la variabile HEIGHT (altezza) e la inizializza 1.
Quando si esegue lo scroll lo script vede se l'altezza dello scrolling è maggiore di 1 (HEIGHT), se è vero imposta la variabile SCROLLED su TRUE ed esegue il cambiamento del colore del Background della TOPBAR, altrimenti quest'ultimo rimane invariato.

Questo è il codice del JS:
Codice:
$(document).ready(function (){

	var scrolled = false;
	var height = 1;

	$(document).scroll(function()
	{
		if( $(this).scrollTop() > height ){
			if( !scrolled ){
				scrolled = true;
				$('#topbar').animate({background:'#333333'}, 300);
			}
		}
		else{
			if( scrolled ) {
				scrolled = false;
				$('#topbar').animate({background:''}, 300);
			}
		}
	});
});
Il problema che da è che al primo caricamento della pagina (quindi scroll non ancora eseguito) la barra rimane del colore come se la variabile SCROLLED fosse già TRUE.
Appena scrollo la barra rimane uguale per il motivo di cui sopra e appena torno al top lo script funziona e imposta la variabile SCROLLED su FALSE applicando correttamente il cambio del colore di sfondo al div.
 
  • Like
Reactions: AlessandraPoggi

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
prova a inserire un alert dopo ciascun "if" sulla variabile "scrolled"
penso che al caricamento della pagina non vedrai nulla
se così è, devi modificare usando "onload" nel tag "body"
 

Jonn

Utente Attivo
29 Dic 2012
352
3
18
Pistoia
Grazie mille della risposta, ieri sera facendo una prova ho visto che oltretutto questo script non funziona su Google Chrome ma solo su Firefox, teniamo conto che lo script l'ho trovato su internet e che di JS non è che ne capisco molto per non dire nulla, però ecco, se c'è una soluzione anche diversa da JS tipo con CSS (sarebbe perfetto) o addirittura PHP anche se sarebbe uno spreco per PHP però ecco, sarebbe più facile ed immediato per me, mentre con JS mi servirebbe il codice completo perchè non saprei da dove rifarmi.
 

Jonn

Utente Attivo
29 Dic 2012
352
3
18
Pistoia
Ok allora, quello script che avevo postato non sono riuscito a farlo funzionare a verso, ho risolto in parte con un altro script:
Codice:
$(window).ready(function () {
var scroll_pos = 0;
$(window).scroll(function () {
        scroll_pos = $(this).scrollTop();
        if (scroll_pos > 1) {
            $('#topbar').css('background-color', 'rgba(0, 0, 0, 0.8)');
            $(".vocemenu a").css('color', '#FFFFFF');
            $('.vocemenu a').hover(
                function () {$(this).css({"color": "#FF4400"});},
                function () {$(this).css({"color": "#FFFFFF"});}
            );
        } else {
            $("#topbar").css('background-color', 'none');
            $(".vocemenu a").css('color', '#000000');
            $('.vocemenu a').hover(
                function () {$(this).css({"color": "#FF4400"});},
                function () {$(this).css({"color": "#000000"});}
            );
        }
    });
});
Con questo funziona anche su Chrome ed ho aggiunto la colorazione dei link all'interno della barra (i ".vocemenu"), rimane comunque il problema che al primo caricamento della pagina la #topbar si comporta come se lo script qui sopra non esistesse, entra in funzione solo dopo il primo scrolling quindi ho forzato lo stile tramite CSS:

Codice:
#topbar {float: left;  width: 100%; position: fixed;}
.vocemenu a {color: #000000; display: block; text-decoration: none;}
.vocemenu a:hover {color: #FF4400; cursor: default;}
Ho tolto le dimensioni (width, padding e margin..) perchè tanto non servono per questo problema.
Praticamente appena apro la pagina la barra non deve avere lo sfondo per essere trasparente e i link del menu color nero, quando scorro la pagina la barra diventa nera e i link bianchi, quando c'è l'hover dei link devono essere arancioni sia quando sono bianchi che neri.
Questa però è una soluzione forzata appunto, sono convinto che il problema è semplicissimo ma il Javascript non lo conosco bene quindi ne approfitto per riuppare il 3d.