用HTMX和Go制作一个小游戏.我有HTMX轮询服务器和更新游戏的状态每1秒或用户输入

<div class="game" hx-post="/tick" hx-trigger="every 1s, keydown[ (some keys here) ] from:body">
    {{ block "state" . }}
    <!-- state -->
    {{ end }}
</div>

当游戏结束时,我发送286状态码来停止轮询"每一个"触发器,如前所述here.

用户可以 Select 重新启动游戏,我如何恢复轮询?

请注意,在状态块内移动div不是一个选项,因为用户输入会重置1秒计时器.

是否有其他状态代码可以发送?甚至是一些定制JS来重新启动轮询?

推荐答案

HTMX方式

重新启动按钮可以重新加载整个<div class="game"..>.例如,我定义了返回游戏字段的/new-game端点:

<div class="game" hx-post="/tick" hx-trigger="every 1s, keydown[ (some keys here) ] from:body">
</div>

重启按钮看起来像:

<button hx-get="/new-game" hx-trigger="click" hx-target=".game" hx-swap="outerHTML">Restart</button>

由于我们使用的是hx-swap="outerHTML",它将替换整个元素,HTMX将从头开始处理它.

纯JavaScript

您还可以通过重新创建div.game并调用htmx.process('.game')来设置它,从而对纯JavaScript执行相同的操作.

仅仅在已处理的元素上调用htmx.process是不起作用的.因此,您必须创建一个新的,作为一个简单的选项,您可以利用node.cloneNode()个API.

function restartGame() {
    const game = htmx.find('.game');
    const clone = game.cloneNode();

    game.parentNode.insertBefore(clone, game);
    htmx.remove(game);
    htmx.process('.game');
}
<button onclick="restartGame()">Restart</button>

Javascript相关问答推荐

是什么原因导致此Angular 16电影应用程序中因类型错误而不存在属性?

将json数组项转换为js中的扁平

我不知道为什么setwritten包装promise 不能像我预期的那样工作

使搜索栏更改语言

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

为什么!逗号和空格不会作为输出返回,如果它在参数上?

虚拟滚动实现使向下滚动可滚动到末尾

我可以使用使用node.js创建的本地主机来存储我网站上提交的所有数据吗?没有SQL或任何数据库.只有HTML语言

rxjs插入延迟数据

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

使用Nuxt Apollo在Piniastore 中获取产品细节

为什么客户端没有收到来自服务器的响应消息?

如何限制显示在分页中的可见页面的数量

在不扭曲纹理的情况下在顶点着色器中旋转UV

用于部分字符串的JavaScript数组搜索

为什么NULL不能在构造函数的.Prototype中工作

Angel Auth Guard-用户只有在未登录时才能访问登录页面,只有在登录时才能访问其他页面

限制数组中每个元素的长度,

Node.js的Fetch()调用总是创建新的Express会话

对象作为react 子对象无效(已找到:具有键的对象{type,props}).如果要呈现一个子级集合,请改用数组