Как я могу создать анимированную таблицу лидеров в реальном времени? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь создать простую таблицу лидеров, которая обновляется в режиме реального времени (или достаточно близко) Однако я хочу, чтобы она была анимированной .Мне удалось создать таблицу обновлений, которая обновляется каждую секунду, используя простой скрипт AJAX, который загружает другую страницу PHP.Все это прекрасно работает и отображает таблицу, как и должно, но я не знаю, как заставить ее анимироваться вверх / вниз, если другая игра имеет более высокий счет, чем они.

Что я сделал:

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 , который хотя и позволяет мне получать данные в реальном времени, но я не думаю, что он позволит мне оживить строку вверх / внизи это проблема, с которой я сталкиваюсь.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вы правы sockets.io не позволит вам, потому что это никак не связано с анимацией, однако они позволят вам анимировать, сообщая вашему приложению "Когда нужно анимировать".В прошлый раз, когда я проверял, sockets.io предназначался для node.js, не уверен, что они поддерживают PHP или если PHP начал поддерживать WebSockets.

WebSockets в основном устанавливает соединение между вашимклиент и сервер.Они работают над публикацией, подпиской модели.Таким образом, ваш сервер откроет соединение, и ваш клиент подпишется на него.Как только соединение между сервером и клиентом установлено, ваш сервер сможет публиковать изменения, и клиент сможет их прослушивать.Грубая реализация будет выглядеть примерно так.Сначала вам нужно открыть канал в своем клиенте, чтобы сервер и клиент могли обмениваться данными через него.

<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

?>

Вы можететакже используйте ServiceWorkers, LongPolling и ShortPolling для прослушивания изменений в реальном времени и изменения DOM для событий, запускаемых сервером

Steps To Animate

InЧтобы перейти к реальной анимации, вы можете выполнить следующие шаги

1 - Найти элемент dom, содержащий нового лидера, вы можете легко сделать это с помощью getElementById и присвоить уникальный идентификатор каждому предмету на доске.

2 - Получите предыдущего лидера, который в идеале будет по-прежнему на вершине вашей таблицы лидеров

3 - Как только закончите, следуйте этому примеру Поменяйте местами два HTML-элемента визуально и в DOM и оживите все это?.В этом примере clickedDiv - ваш новый лидер, а prev - ваш старый лидер.

0 голосов
/ 10 октября 2018

Animate.css - полезная библиотека, которую я использую для анимации.Надеюсь, вы найдете это полезным.

Кроме того, попробуйте использовать сокет вместо ajax для данных в реальном времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...