2013-07-25 13 views
8
// Repaints the progress bar's filled-in amount based on the % of time elapsed for current video. 
progressBar.change(function() { 
    var currentTime = $(this).val(); 
    var totalTime = parseInt($(this).prop('max'), 10); 

    // Don't divide by 0. 
    var fill = totalTime !== 0 ? currentTime/totalTime : 0; 

    // EDIT: Added this check, testing with it now. 
    if (fill < 0 || fill > 1) throw "Wow this really should not have been " + fill; 

    var backgroundImage = '-webkit-gradient(linear,left top, right top, from(#ccc), color-stop(' + fill + ',#ccc), color-stop(' + fill + ',rgba(0,0,0,0)), to(rgba(0,0,0,0)))'; 
    $(this).css('background-image', backgroundImage); 
}); 

Sto riempiendo una barra di avanzamento nel tempo utilizzando il javascript sopra per modificare l'immagine di sfondo con una sfumatura.Esiste un limite alla frequenza con cui è possibile modificare l'immagine di sfondo di un elemento?

Estremamente intermittente: l'immagine di sfondo interrompe completamente il rendering. Ho inserito la registrazione in questo codice e tutto sembra funzionare correttamente. Non sto dividendo per 0, né è il mio riempimento 0, ma l'immagine di sfondo smette di mostrare.

Se ricarico l'elemento dom, riprende a funzionare! Quindi, mi chiedo se sto facendo qualcosa di veramente sbagliato qui. Forse non riesco a impostare l'immagine di sfondo in modo così continuo per ore?

MODIFICA: Ho intenzione di provare e ottenere un breve video clip con alcune registrazioni per evidenziare il problema. Potrebbe volerci un po 'per riprodurlo.

  • metto un punto di interruzione nel codice e rilevare il valore di riempimento ad un valore maggiore di 0 e minore di 1. In questo caso il suo valore era 0,6925

  • messa un punto di interruzione nel codice , rompendo il punto e quindi permettendo che l'esecuzione continui, il riempimento della barra di avanzamento riappare!

EDIT2: Ecco un video che ciò accada: http://screencast.com/t/DvzBr06f

+3

No, non c'è limita il numero di volte in cui è possibile modificare una proprietà css. – adeneo

+0

Buono a sapersi. Grazie. –

+0

Qual è il valore esatto della variabile 'fill' quando ciò accade? Aggiungi un altro controllo e verifica se è mai stato attivato 'if (fill < 0 || fill > 1)' – Ma3x

risposta

0

Non c'è limite. Quale browser utilizzate? Potrebbero esserci alcuni problemi con la cache del browser, quindi cerca di non modificare troppo l'immagine. Ecco un test che ho messo insieme, che funziona bene, FIDDLE e il codice:

CSS:

div { 
    height:25px; 
} 

HTML:

<div id="pg"></div> 

JS:

var counter = 0, 
    alpha = window.setInterval(function(){ 
     counter++; 
     if(counter > 60){ 
      window.clearInterval(alpha); 
     } else { 
      progressBar("#pg", counter); 
     } 
    }, 500), 
    progressBar = function (elem, val) { 
     var fill = val/60; 
     var backgroundImage = '-webkit-gradient(linear,left top, right top, from(#ccc), color-stop(' + fill + ',#ccc), color-stop(' + fill + ',rgba(0,0,0,0)), to(rgba(0,0,0,0)))'; 
     $(elem).css('background-image', backgroundImage); 
    }; 
+0

Grazie per l'esempio. Il problema alla fine è andato via, ma ho lasciato questa domanda aperta poiché aveva un alto numero di voti. Chiudendolo ora con il tuo poiché questa è la migliore risposta. –

0

Forse si può evitare di modificare la BG per granularità di < 0,3%?

if (lastFill && (fill - lastFill) < 0.003) 
    return; // don't draw < 0.3% increments. 
// draw.. 
lastFill = fill; 

Speriamo che se si tratta di un problema di risorse, 300 volte sarebbe fattibile - dove 10.000 volte forse non lo sarebbe.

0

No, non c'è limite. Puoi modificare l'immagine quanto vuoi, anche se potrebbero esserci problemi riguardanti la cache e le risorse, quindi tieni il valore entro 10000.

0

No, per quanto ne so, non ci sono limiti. E non penso che influisca davvero qualcosa.

+0

Gentilmente spiega la tua risposta. – Irfan

Problemi correlati