Javascript是否打算在网站/ webapp上尽可能少地运行?我的意思是通常意图在页面加载后立即运行所有js文件并将它们放在一边,然后当函数立即执行它们并完成它时?
我正在使用谷歌地图制作一个项目,我有一个脚本化的自定义标记对象,调试器告诉我浏览器在页面上出现任何内容之前运行我的所有js文件。
我的问题出现在这里:我想通过jQuery(类似于Dock中的OS X图标)来动画某些标记来连续反弹,而我在无限循环函数中的几次尝试都只是让浏览器崩溃。所以我理解浏览器不喜欢这样,但有没有办法在用户导航页面时让一个简单的脚本在后台重复?或者Javascript不应该是用这种方式?
(我在Flash工作了很长时间,所以我的心态仍然存在。)
答案 0 :(得分:3)
是的,Javascript函数应该尽力而为,并尽快退出。 GUI和脚本在同一个线程上运行,因此只要您在Javascript函数中,浏览器中就不会显示任何内容。如果您尝试使用无限循环,浏览器将显示为冻结。
使用window.setInterval
和window.setTimeout
方法触发在特定时间运行的代码。通过运行每秒更新几次的间隔,您可以创建动画。
答案 1 :(得分:2)
您必须设置计时器以在定义的时间后执行脚本。
var timer = setTimeout(code, milliseconds);
将在某某毫秒内执行code
。每次执行脚本都可以设置一个新的计时器来再次执行脚本。
您可以使用clearTimeout(timer)
取消定时活动。
答案 2 :(得分:1)
使用setTimeout()或setInterval()。关于它的MDC文章相当不错。
你需要在快速运行的函数内部进行更新,但需要多次调用,而不是在循环内部进行更新。
答案 3 :(得分:1)
既然你说你正在使用jQuery,考虑使用它的effects API(例如jQuery.animate()
),它会让你的生活更轻松!
答案 4 :(得分:0)
就个人而言,我在页面加载后尽可能多地保存代码,部分方法是将所有<script>
放在<body>
的底部。这意味着(感知的)页面加载时间的减少,同时让我的所有JS准备好在需要时运行。
我不建议您阅读文档开头所需的所有内容。相反,将事物绑定到事件,例如按钮的点击等。