当前位置:首页 > VUE

vue实现分页按钮

2026-03-09 11:02:25VUE

实现分页按钮的基本思路

在Vue中实现分页按钮需要结合数据绑定和事件处理。通常需要一个当前页码(currentPage)和总页数(totalPages)的状态,通过计算属性或方法生成页码数组,并用v-for渲染按钮。

定义数据与计算属性

data() {
  return {
    currentPage: 1,
    totalItems: 100,
    itemsPerPage: 10
  }
},
computed: {
  totalPages() {
    return Math.ceil(this.totalItems / this.itemsPerPage)
  },
  pages() {
    const range = [];
    const start = Math.max(1, this.currentPage - 2);
    const end = Math.min(this.totalPages, this.currentPage + 2);

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

模板渲染

<template>
  <div class="pagination">
    <button 
      @click="changePage(currentPage - 1)"
      :disabled="currentPage === 1"
    >
      上一页
    </button>

    <button 
      v-for="page in pages" 
      :key="page"
      @click="changePage(page)"
      :class="{ active: currentPage === page }"
    >
      {{ page }}
    </button>

    <button 
      @click="changePage(currentPage + 1)"
      :disabled="currentPage === totalPages"
    >
      下一页
    </button>
  </div>
</template>

方法实现

methods: {
  changePage(page) {
    if (page >= 1 && page <= this.totalPages) {
      this.currentPage = page;
      this.$emit('page-changed', page); // 可选:触发父组件事件
    }
  }
}

样式优化

添加CSS增强交互体验:

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

高级功能扩展

对于大量数据的分页,可以添加省略号逻辑:

computed: {
  pages() {
    const range = [];
    const delta = 2;
    const left = this.currentPage - delta;
    const right = this.currentPage + delta;

    for (let i = 1; i <= this.totalPages; i++) {
      if (
        i === 1 ||
        i === this.totalPages ||
        (i >= left && i <= right) ||
        (i === left - 1 && left > 2) ||
        (i === right + 1 && right < this.totalPages - 1)
      ) {
        range.push(i);
      } else if (range[range.length - 1] !== '...') {
        range.push('...');
      }
    }
    return range;
  }
}

模板中需要对应处理省略号:

vue实现分页按钮

<template>
  <span v-if="page === '...'">...</span>
  <button v-else ...></button>
</template>

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

相关文章

css按钮制作

css按钮制作

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

vue实现单选按钮

vue实现单选按钮

实现单选按钮的基本方法 在Vue中实现单选按钮通常使用v-model指令绑定数据,结合input元素的type="radio"属性。以下是一个基础示例: <template> <…

css按钮制作

css按钮制作

CSS按钮制作方法 基础按钮样式 创建一个简单的CSS按钮需要定义基本属性,如背景色、边框、内边距和文字样式。示例代码: .btn { background-color: #4CAF50;…

vue分页插件实现

vue分页插件实现

Vue 分页插件实现方法 使用现成组件库(推荐) Element UI、Ant Design Vue 等主流库已提供成熟分页组件,可直接集成: <template> <el-p…

uniapp气泡按钮

uniapp气泡按钮

uniapp 气泡按钮实现方法 在 uniapp 中实现气泡按钮效果可以通过多种方式完成,以下是几种常见的实现方案: 使用 CSS 样式实现基础气泡 通过 CSS 的 border-radius 和…

vue实现按钮控制

vue实现按钮控制

Vue 实现按钮控制的方法 在 Vue 中实现按钮控制可以通过多种方式,包括禁用按钮、动态样式、条件渲染等。以下是几种常见的方法: 使用 v-bind:disabled 控制按钮禁用状态 通过绑定…