当前位置:首页 > VUE

vue实现分页按钮

2026-02-17 22:22:34VUE

Vue 分页按钮实现方法

基础分页组件结构

使用 Vue 的 v-for 渲染页码按钮,结合计算属性动态生成页码范围:

<template>
  <div class="pagination">
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <button 
      v-for="page in pageRange" 
      :key="page"
      @click="changePage(page)"
      :class="{ active: page === currentPage }"
    >
      {{ page }}
    </button>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>

核心计算属性

计算页码范围时考虑当前页位置和最大显示页码数:

computed: {
  totalPages() {
    return Math.ceil(this.totalItems / this.itemsPerPage);
  },
  pageRange() {
    const range = [];
    const maxVisible = 5; // 最大可见页码数
    let start = Math.max(1, this.currentPage - Math.floor(maxVisible / 2));
    const end = Math.min(start + maxVisible - 1, this.totalPages);

    start = Math.max(1, end - maxVisible + 1);

    for (let i = start; i <= end; i++) {
      range.push(i);
    }
    return range;
  }
}

事件处理与方法

实现页码切换和边界检查:

methods: {
  changePage(page) {
    if (page !== this.currentPage) {
      this.currentPage = page;
      this.$emit('page-changed', page);
    }
  },
  prevPage() {
    if (this.currentPage > 1) {
      this.changePage(this.currentPage - 1);
    }
  },
  nextPage() {
    if (this.currentPage < this.totalPages) {
      this.changePage(this.currentPage + 1);
    }
  }
}

样式优化

添加基础样式增强交互体验:

.pagination {
  display: flex;
  gap: 5px;
  margin-top: 20px;
}
button {
  padding: 5px 10px;
  border: 1px solid #ddd;
  background: white;
  cursor: pointer;
}
button:hover:not(:disabled) {
  background: #eee;
}
button.active {
  background: #42b983;
  color: white;
  border-color: #42b983;
}
button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

高级功能扩展

  1. 省略号处理
    当页码范围不连续时显示省略号:
// 在 computed 中修改 pageRange
if (start > 1) range.unshift('...');
if (end < this.totalPages) range.push('...');
  1. 动态页码数量
    根据屏幕宽度调整可见页码数:
data() {
  return {
    maxVisible: window.innerWidth < 768 ? 3 : 5
  }
},
mounted() {
  window.addEventListener('resize', this.handleResize);
},
methods: {
  handleResize() {
    this.maxVisible = window.innerWidth < 768 ? 3 : 5;
  }
}
  1. Props 配置
    使组件可通过 props 接收外部参数:
props: {
  totalItems: {
    type: Number,
    required: true
  },
  itemsPerPage: {
    type: Number,
    default: 10
  },
  currentPage: {
    type: Number,
    default: 1
  }
}

使用示例

在父组件中集成分页控件:

vue实现分页按钮

<pagination
  :total-items="100"
  :items-per-page="10"
  :current-page.sync="currentPage"
  @page-changed="handlePageChange"
/>

标签: 分页按钮
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('loca…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用 Element UI 分页组件 Element UI 提供了现成的分页组件 el-pagination,适合快速集成。需要先安装 Element UI 库。 安装 Ele…

css 制作按钮

css 制作按钮

基础按钮样式 使用CSS创建一个基础按钮需要定义display、padding、background-color和border等属性。以下是一个简单示例: .button { display:…

vue实现按钮按压

vue实现按钮按压

Vue 实现按钮按压效果 在 Vue 中实现按钮按压效果可以通过 CSS 和 Vue 的事件绑定结合完成。以下是一个完整的实现方法: 添加按压样式 通过 CSS 定义按钮的默认和按压状态样式: .…

vue实现上传按钮

vue实现上传按钮

Vue 实现上传按钮的方法 使用原生 HTML input 和 Vue 处理 通过 HTML 的 input 元素结合 Vue 的事件处理实现文件上传功能。 <template> &…

vue可选按钮实现

vue可选按钮实现

实现 Vue 可选按钮 在 Vue 中实现可选按钮通常涉及单选或多选功能,可以通过 v-model 绑定数据,结合样式切换完成。以下是两种常见实现方式: 单选按钮组 使用 v-model 绑定一个变…