NodeJS 如何重新分页JavaScript/HTML卡片元素?

kxxlusnw  于 2023-08-04  发布在  Node.js
关注(0)|答案(3)|浏览(109)

我有一个聊天应用程序。在这个聊天应用程序中,过去发送的消息是可见的,但随着消息数量的增加,页面长度增加得太多。我可以在这个应用程序中将每10篇文章分页为1页吗?添加过去聊天记录的JavaScript代码:

socket.on('old_messages', (msg) => {
    msg.forEach(element => {
        let messageContent = " <p class='card'><b>" + element.username + ": </b>" + element.content + "</p>";
        MESSAGE_LIST.innerHTML = messageContent + MESSAGE_LIST.innerHTML;
    });
});

字符串
应用程序截图:

的数据

pgvzfuti

pgvzfuti1#

**对于UI:**理想情况下,您的聊天应用程序应该是显示消息的页面上定义大小的div。您可以在该div中启用滚动,并将视图保留在最新消息处。
**对于消息:**一次显示N条消息,用户滚动时不应显示旧消息。
选项1用户滚动到旧消息时,从后台取消息。这里假设您有一个分页的API,可以根据页面大小和页码返回N个消息。
选项2如果您没有后台分页的API来拉取消息,那么您可以将消息存放在前端的不同数组中,并使用不同的数组渲染消息。当用户滚动时,将消息从第一个数组移动到第二个数组以呈现它们。**注意:**此方法会使网页速度变慢,因为消息数量会增加。

vlju58qv

vlju58qv2#

你可以使用Array.slice方法来完成分页。

socket.on('old_messages', (msg) => {
    let paginatedMsg = msg.slice(pageNumber * 10 - 10, pageNumber * 10);
    paginatedMsg.forEach(element => {
        let messageContent = " <p class='card'><b>" + element.username + ": </b>" + element.content + "</p>";
        MESSAGE_LIST.innerHTML = messageContent + MESSAGE_LIST.innerHTML;
    });
});

字符串
但实际上,这不是最好的收获。最佳实践是让后端根据分页选项发送数据。

zzzyeukh

zzzyeukh3#

您可以尝试以下操作:

const PAGE_SIZE = 10; // Number of messages per page
let currentPage = 1; // Current page number

socket.on('old_messages', (msg) => {
    // Calculate the starting index of messages for the current page
    const startIndex = (currentPage - 1) * PAGE_SIZE;

    // Extract only the messages for the current page
    const messagesForCurrentPage = msg.slice(startIndex, startIndex + PAGE_SIZE);

    // Clear the existing content
    MESSAGE_LIST.innerHTML = '';

    // Append the messages to the message list
    messagesForCurrentPage.forEach(element => {
        let messageContent = "<p class='card'><b>" + element.username + ": </b>" + element.content + "</p>";
        MESSAGE_LIST.innerHTML += messageContent;
    });
});

// Function to go to the next page
function nextPage() {
    currentPage++;
    socket.emit('get_old_messages', currentPage); // Request messages for the next page
}

// Function to go to the previous page
function prevPage() {
    if (currentPage > 1) {
        currentPage--;
        socket.emit('get_old_messages', currentPage); // Request messages for the previous page
    }
}

字符串

相关问题