[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
3.203
207
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.
 
Discussioni simili
Autore Titolo Forum Risposte Data
B [Javascript] Cambiare classe ed aggiornare relativi eventi Javascript 3
crealatualista [Javascript] Cambiare record tabella... Javascript 4
napuleone [Javascript] cambiare i parametri di stampa con js Javascript 2
V javascript - cambiare immagine di sfondo di un div Javascript 3
D [Javascript] Script che consenta di cambiare un'immagine in base all'ora del giorno della settimana Javascript 11
B Javascript: Cambiare valore Css Javascript 1
max_400 Cambiare le immagini con un click senza javascript HTML e CSS 4
P Problema con apici nelle stringhe [era:Cambiare grandezza carattere con JavaScript] Javascript 3
G Come cambiare un css con javascript ?? HTML e CSS 0
I Creare un banner temporaneo JavaScript Javascript 0
S Impossibile scorrere un oggetto in JavaScript Javascript 0
N Passare array da php a javascript PHP 5
L Quiz javascript funzionante da migliorare Javascript 0
P errore 404 con javascript Javascript 2
D aiuto funzioni javascript Javascript 1
M Upload immagine con javascript problemi con FormData() Javascript 1
L countdown multiplo javascript Javascript 1
S Problemi Javascript + Aruba Javascript 2
M Inviare un file su un server remoto con JavaScript Javascript 0
T a href="javascript:;" Javascript 1
F Creare elementi html con javascript Javascript 3
A pulsante di update campo mysql con javascript Javascript 2
8 Javascript - PDF Form Javascript 0
B javascript per problemi con pdf e Safari Javascript 0
N informazione javascript Programmazione 0
I Eecuzione di javascript in ciclo foreach php. PHP 7
P javascript:document.forms Javascript 7
S Consiglio esercizio Javascript Javascript 2
MarcoGrazia Aggiungere o rimuovere classi in javascript Javascript 1
P Passaggio id php a javascript PHP 6
R Confrontare il dominio di una mail con una stringa contenente un dominio personalizzato, tutto ciò in php o javascript PHP 0
E lettura da un Database con Javascript jQuery 2
V TRIS in javascript Javascript 1
IClaude Funzione Javascript Javascript 8
Alex_70 Javascript date color Javascript 3
F Convertire JavaScript per la compatibilità nei browser obsoleti Javascript 0
I Passare dei parametri in javascript PHP 0
Shyson Meglio Javascript o HTML? Javascript 4
G Problema verifica palindromo e verifica pari e dispari javascript Javascript 0
M Chiamare pagina php da javascript Javascript 8
M Errore JavaScript per php [objeto HTMLParagraphElement] PHP 0
D Javascript per il download dei dati Javascript 0
grgfede Problema javascript con aruba Javascript 1
R Cerco supporto in programmazione javascript Offerte e Richieste di Lavoro e/o Collaborazione 0
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
W Modificare il Type di un Input box in javascript ovunque si trovi Javascript 0
I javascript come caricare una pagina sopra quella corrente in automatico Javascript 2
L [Javascript] Problema salvataggio dati in db Javascript 1
max1974 [Javascript] Grafico chartjs con dati da J.ajax Javascript 3
G Quiz Javascript Javascript 4

Discussioni simili