Ecco il codice che ho provato per i fiocchi di neve. Tutto sembra ok ma una volta trascorso il periodo di tempo in cui lo script non risponde significa (rallenta il browser Firefox). Non sono sicuro del motivo per cui ciò dovrebbe accadere. Come posso renderlo reattivo senza causare nulla al browser. Ecco FIDDLELooping della funzione causa la mancata risposta in javascript
Come posso fare che lo script reattivo, che non causa alcuna.! Credo di aver fatto un errore nel loop la funzione javascript :( Qualsiasi suggerimento sarebbe grande
Grazie
Javascript:.
// window.setInterval(generateSnow, 0);
var windowHeight = jQuery(document).height();
var windowWidth = jQuery(window).width();
function generateSnow() {
for (i = 0; i < 4; i++) {
var snowTop = Math.floor(Math.random() * (windowHeight));
snowTop = 0;
var snowLeft = Math.floor(Math.random() * (windowWidth - 2));
var imageSize = Math.floor(Math.random() * 20);
jQuery('body').append(
jQuery('<div />')
.addClass('snow')
.css('top', snowTop)
.css('left', snowLeft)
.css('position', 'absolute')
.html('*')
);
}
}
function snowFalling() {
jQuery('.snow').each(function(key, value) {
if (parseInt(jQuery(this).css('top')) > windowHeight - 80) {
jQuery(this).remove();
}
var fallingSpeed = Math.floor(Math.random() * 5 + 1);
var movingDirection = Math.floor(Math.random() * 2);
var currentTop = parseInt(jQuery(this).css('top'));
var currentLeft = parseInt(jQuery(this).css('left'));
jQuery(this).css('top', currentTop + fallingSpeed);
if (movingDirection === 0) {
jQuery(this).css('bottom', currentLeft + fallingSpeed);
} else {
jQuery(this).css('bottom', currentLeft + -(fallingSpeed));
}
});
}
window.setInterval(snowFalling, 15);
window.setInterval(generateSnow, 1000);
Non è una risposta completa, quindi è solo un commento, ma non è necessario scrivere il movimento in quel modo. Puoi usare transizioni css o animate jQuery. Basta creare il fiocco di neve e impostare il tipo di animazione e la lunghezza, con un callback per rimuoverlo alla fine. Molto più facile di quanto sopra, e non avrà alcun problema di risposta (a meno che non si sia stupidi: p) – Archer
Per inciso, questo tipo di applicazione sarebbe molto più adatto all'utilizzo di un canvas HTML piuttosto che alla manipolazione DOM. –
Ho cercato di ottimizzare la soluzione riducendo il numero di inserimenti dom, passando dal posizionamento assoluto a quello fisso e eseguendo animazioni su frame di animazione del browser.http://jsfiddle.net/7BFCM/7/ Questo è ancora cpu intuitivo quindi mi piacerebbe google per qualche soluzione tela. http://www.techumber.com/2013/01/HTML5-Canvas-Tutorial-On-Creating-Snowfall-Effect.html –