javascript - 如何创建动画实时排行榜?

标签 javascript php jquery css ajax

我正在尝试创建一个简单的实时更新(或足够接近)的排行榜表但是我希望它是动画的。我已经能够使用加载另一个 PHP 页面的简单 AJAX 脚本创建每秒更新一次的更新表。这一切工作正常并按应有的方式显示表格,但我不知道如果另一个游戏的分数比他们高,如何让它向上/向下动画。

我做了什么:

leaderboard.html

<html>
<script src="https://code.jquery.com/jquery-latest.js"></script>
<script>
 $(document).ready(function() {
     $("#Refresh").load("leaderboardupdate.php");
   var refreshId = setInterval(function() {
      $("#Refresh").load('leaderboardupdate.php');
   }, 1000);
   $.ajaxSetup({ cache: false });
});

</script>
</html>

leaderboardupdate.php

<?php
$sql = "SELECT Name, Kills FROM Table ORDER BY Kills DESC LIMIT 5";
$result = $conn->query($sql);

echo '<div id="container">';

while($row = $result->fetch_assoc()) { 


<div class="row">
    <div class="name">'. $row["Name"] .'</div>
    <div class="score">' .$row["Kills"]. '</div>
</div>';

}
echo '</div>';

?>

就像我说的那样,这成功地创建了一个表并更新了数据(按照 SQL 查询中的杀戮顺序),但是如果他们在杀戮方面超过了另一个玩家,我想制作一个动画行。

我能找到的最接近的例子: https://codepen.io/bsngr/pen/WbLEvp

我调查了Socket.IO ,虽然它允许我获得实时数据,但我认为它不允许我向上/向下设置行动画,这就是我面临的问题。

最佳答案

你是对的 sockets.io 不会让你这样做,因为它与动画没有任何关联,但是它们会通过让你的 ap 知道“何时制作动画”来让你制作动画。上次我检查 sockets.io 是为了 node.js 不确定他们是否支持 PHP 或者 PHP 已开始支持 WebSockets

WebSockets 主要是在您的客户端和服务器之间建立连接。他们致力于发布、订阅模式。所以你的服务器将打开一个连接,你的客户端将订阅它。一旦建立了服务器和客户端之间的连接,您的服务器将能够发布更改,而客户端将能够收听它们。粗略的实现看起来像这样。首先,您需要在客户端中打开一个 channel ,以便服务器和客户端可以通过它进行通信。

<script>
var connection = sockets.open(`user-${userID}`) // will open a channel for some user
// once the connection is established you can listen to events
connection.on('update', function(data) {
 //perfect place to animate stuff and update data
})

然后在你的后端

<?php

$results = $conn->UpdateSomething(); // the place in your code where actions happen;
$socketConnection.trigger($channel, 'update', $results) // this will trigger update event on a $channel with data $results

?>

您还可以使用 ServiceWorkersLongPollingShortPolling 来监听实时变化并根据服务器触发的事件修改您的 DOM

制作动画的步骤

为了制作实际的动画,您可以按照以下步骤操作

1 - 找到包含新领导者的 dom 元素,您可以通过 getElementById 轻松完成,并为棋盘中的每个元素提供唯一 ID。

2 - 获得前任领导者,理想情况下他仍将位于您的排行榜榜首

3 - 完成后,按照这个例子Swapping two HTML elements visually and on the DOM, and animate it all? .在此示例中,clickedDiv 是您的新领导者,prev 是您的旧领导者。

关于javascript - 如何创建动画实时排行榜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739830/

相关文章:

javascript - Magento 时事通讯成功消息弹出

javascript - 如何将多项选择 div 中的问题分开?

javascript - 在 Javascript 循环中显示 PHP 变量

php - Laravel 资源 api 使用引用表的 where 子句获取所有条目

javascript - 更新已加载 tr 的 td 内容

javascript - 添加类时,粘性导航会跳过几个像素

javascript - d3 使 Y 轴位置固定,即使滚动条 x

javascript - 在同一元素上使用 ngInclude 时,ngRepeat 的动画不起作用

javascript - 红色 Node 在管理 UI 中获取配置 Node 值

PHP foreach 循环分为两个不同的包含文件