循环函数会导致它在 javascript 中无响应
Looping the Function cause it unresponsive in javascript
这是我为雪花尝试的代码。一切似乎都很好,但是一旦脚本无响应的一段时间意味着(它会减慢浏览器Firefox的速度(。我不确定为什么会发生这种情况。我怎样才能让它响应不会导致浏览器。这是小提琴
我怎样才能使它成为不会导致任何的响应式脚本。!我想我在循环 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);
您在运行时在页面上添加和删除大量元素,使浏览器频繁刷新该页面的结构。
该方法是:
- 在性能方面你能做的最糟糕的事情
- 可能会让浏览器在 生成、删除、生成、删除、生成、删除、删除后瘫倒在地......
使用此配置,移动浏览器可能会在 2 秒后冻结。
我建议在一开始就预生成所有 DIV,重用它们并使用 CSS 动画或 jQuery animate(( 来完成您要做的事情。
正如@ZathrusWriter提到的,你应该重用你的雪花元素,这样内存就不会膨胀。
创建一堆雪花后浏览器开始变慢的原因是因为 JavaScript 使用garbage collector
管理内存。因此,释放内存的速度比为新雪花分配内存的速度要慢得多。理想情况下,您希望为所有雪花分配一次内存。
基本上,在任何给定时间为屏幕上您想要的雪花数量创建元素。将它们全部放在屏幕上随机位置开始。然后,一旦雪花离开屏幕或隐形,该雪花就可以再次使用。因此,您将它移回顶部(可能在另一个随机位置(,并使其再次像雪花一样落下(而不是删除它并创建一个新的(。
这距离创建粒子发射器只有一步之遥。
相关文章:
- 如何从SeleniumWebdriver获取异步Javascript响应
- 如何从java中的URL读取JavaScript响应
- 节点,express应用程序返回text/javascript响应头(Content-Type),尽管设置了applic
- 正在Javascript响应中设置会话变量
- 将Javascript响应转换为Array/Map
- Javascript-响应式商店;多个项目-每个项目具有不同的价格值
- RubyonRails环境控制器操作JavaScript响应
- 在ajax请求中使用jquery获取javascript响应UJS
- 在 WordPress 上调用 Javascript 响应式工具提示
- Rails 4 - 强制浏览器执行javascript响应而不是显示文本
- 使用rails在javascript响应中呈现Haml文件
- 轨道3-逃逸部分's在javascript响应中生成了html
- 来自form_for的控制器中的Ajax javascript响应以纯文本形式呈现
- 从PHP登录函数获取javascript响应
- 如何正确地为javascript响应块发送ajax请求
- 加载页面的Javascript响应没有显示在虽然我能从火虫身上看出来
- 动态加载外部JavaScript响应
- Rails默认为"text/javascript"响应使用form_for构建的非显眼JavaScr
- Servlet中的Javascript响应与sendRedirect()冲突
- Android在线服务器接收JavaScript响应而不是Json