You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现投票系统中每页展示2张图片的分页功能

针对你开发投票系统时遇到的分页展示图片需求(每页2张,点击next加载新页),以下是路由、控制器的具体设计方案,附前端实现思路:

路由设计

采用查询参数传递页码的方式,URL更直观且支持刷新页面保留当前页状态,以Express框架为例:

// 定义分页获取图片的路由
app.get('/vote/images', voteController.getImagesPage);

如果偏好RESTful风格,也可以将页码放在路径中:app.get('/vote/images/:page', voteController.getImagesPage),但查询参数更灵活,允许设置默认页码(比如默认展示第1页)。

控制器逻辑

核心是计算偏移量/跳过条数:偏移量 = (当前页码 - 1) * 每页数量,结合数据库查询实现分页,同时获取总数据量判断是否存在下一页。

SQL数据库(以MySQL + Sequelize为例)

exports.getImagesPage = async (req, res) => {
  // 从查询参数获取页码,默认第1页
  const page = parseInt(req.query.page) || 1;
  const pageSize = 2; // 每页展示2张图片
  const offset = (page - 1) * pageSize;

  try {
    // 查询分页数据+总条数,用于计算总页数
    const { count: totalImages, rows: images } = await Image.findAndCountAll({
      limit: pageSize,
      offset,
      // 添加排序规则,保证分页顺序稳定(比如按创建时间倒序)
      order: [['createdAt', 'DESC']]
    });

    const totalPages = Math.ceil(totalImages / pageSize);
    const hasNextPage = page < totalPages;

    // 渲染页面,传递分页相关数据给前端
    res.render('vote', {
      images,
      currentPage: page,
      hasNextPage,
      nextPage: page + 1
    });
  } catch (error) {
    console.error('加载图片分页数据失败:', error);
    res.status(500).send('服务器错误');
  }
};

MongoDB(以Mongoose为例)

exports.getImagesPage = async (req, res) => {
  const page = parseInt(req.query.page) || 1;
  const pageSize = 2;
  const skip = (page - 1) * pageSize;

  try {
    // 查询当前页的图片
    const images = await Image.find()
      .sort({ createdAt: -1 })
      .skip(skip)
      .limit(pageSize);

    // 获取图片总数量
    const totalImages = await Image.countDocuments();
    const totalPages = Math.ceil(totalImages / pageSize);
    const hasNextPage = page < totalPages;

    res.render('vote', {
      images,
      currentPage: page,
      hasNextPage,
      nextPage: page + 1
    });
  } catch (error) {
    console.error('加载图片分页数据失败:', error);
    res.status(500).send('服务器错误');
  }
};
前端按钮实现

在页面模板中(以EJS为例),根据hasNextPage控制按钮显示,点击按钮跳转到对应页码的路由:

<!-- 展示当前页的2张图片 -->
<div class="vote-images">
  <% images.forEach(image => { %>
    <div class="image-item">
      <img src="<%= image.imageUrl %>" alt="投票图片">
      <!-- 这里可以添加投票相关元素 -->
    </div>
  <% }) %>
</div>

<!-- Next按钮 -->
<% if (hasNextPage) { %>
  <a href="/vote/images?page=<%= nextPage %>" class="btn next-btn">Next</a>
<% } else { %>
  <p class="no-more">没有更多图片了</p>
<% } %>

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:45:36