我有一个jQuery游戏(简单的卡片记忆游戏),我从github获得。
它没有“新游戏”按钮,所以一旦游戏结束,没有刷新页面就无法重启游戏。
我不想刷新整个页面,所以我尝试创建这样的点击事件。
<li style="color:black; font-weight:600"><a href="#">new game</a></li>
$(document).ready(function() {
$('a').click(function() {
$("body").load("game.js");
});
});
点击后,外部.js不会被替换。
我用谷歌搜索但没有找到任何东西。
也许这是不可能的?我已经读过,一旦加载.js,就无法用.click删除.js。
这是真的吗?
如果无法替换加载的.js,我该如何构建“新游戏”功能?
感谢您回答这个简单但令人费解的问题(对我这样的新手感到困惑。)问题。
答案 0 :(得分:1)
会出现不良副作用,变量仍设置为旧值等。重新加载脚本与刷新页面不同。
例如,如果你有一个变量currentScore
从0开始然后在你玩的时候加注,那么重新加载脚本不一定会将其重置为0,它可能仍然是51245或者最后一个得分是,基本上搞乱了一切。这也适用于无数其他事情。正在进行的间隔现在将翻倍。将再次添加事件而旧的事件不会被取消,双重调用所有内容。这个清单一直在继续。
基本上这个游戏似乎架构很差,需要工作才能正确重置。当某些东西在其逻辑和架构中存在根本缺陷时,通常不会像快速修复它那样简单。重新开始游戏等功能通常必须作为编码的一部分从第一行代码中进行规划。
答案 1 :(得分:0)
查看jQuery.getScript()
- jQuery.getScript()网址
答案 2 :(得分:0)
即使你再次获取并运行脚本,我猜你可能会有一些奇怪的遗留副作用来自全局变量或DOM中的垃圾。最好让脚本自行清理,game.js中是否有某种重置功能可以调用?
如果没有重置,那么再次运行javascript文件可能会起到作用:
var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = 'game.js';
$(document.head).append( script );
如果游戏表现良好且仅在其画布中操作内容,您可能需要尝试从dom中删除画布并在导入脚本之前重新创建它:$('#gameWrapper').remove(); $(document.body).append('<div id="gameWrapper"></div>')
。这将有助于清除一些残留的事件处理程序和DOM垃圾。
答案 3 :(得分:0)
您可以使用此jQuery删除js文件。
$j('script[src=game.js]').remove();
我只在页面加载中尝试此操作。