这是我试过的雪花的代码。一切似乎都没问题,但一旦脚本无响应的一段时间意味着(它减慢了浏览器的Firefox)。 我不知道为什么会发生这种情况。 我怎样才能使它作为响应而无需任何东西浏览器。 这里是FIDDLE循环功能导致它在JavaScript中无响应
我怎样才能使它响应脚本,不会引起任何! 我想我在循环JavaScript函数:( 犯了一个错误的任何建议将是巨大的
感谢
的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);
不是一个完整的答案,因此它只是一个评论,但你不需要像这样的脚本。你可以使用CSS转换或jQuery动画。只需创建雪花并设置动画类型和长度,并用回调在最后删除它。比上述更容易,并且不会有任何响应性问题(除非你变得愚蠢:p) – Archer
另外,这种应用程序更适合使用HTML画布而不是DOM操作。 –
我试图通过减少dom插入的数量,从绝对位置切换到固定位置,并通过在浏览器动画帧上执行动画来优化您的解决方案。http://jsfiddle.net/7BFCM/7/这仍然是cpu intesive,所以我会谷歌的一些画布解决方案。 //www.techumber.com/2013/01/HTML5-Canvas-Tutorial-On-Creating-Snowfall-Effect.html –