iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue分页器组件使用方法详解
  • 689
分享到

Vue分页器组件使用方法详解

2024-04-02 19:04:59 689人浏览 独家记忆
摘要

本文实例为大家分享了Vue分页器组件的使用,供大家参考,具体内容如下 效果图如下: 鼠标悬浮时切换为箭头: ①创建自定义分页组件Pager.vue:预设主题色为@themeCol

本文实例为大家分享了Vue分页器组件的使用,供大家参考,具体内容如下

效果图如下:

鼠标悬浮时切换为箭头:

①创建自定义分页组件Pager.vue:预设主题色为@themeColor: #D93844; 每页展示10条数据,一次最多显示5个页码,支持输入页码跳转:

<template>
  <div class="m-pager-wrap" v-if="totalCount">
    <span class="u-text">共{{ totalPage }}页 / {{ totalCount }}条</span>
    <span class="u-item txt" :class="{'disabled': currentPage===1}" @click="changePage(1)">首页</span>
    <span class="u-item txt" :class="{'disabled': currentPage===1}" @click="changePage(currentPage - 1)">上一页</span>
    <span
      class="u-ellipsis"
      ref="forward"
      v-show="forwardMore"
      @click="onForward"
      @mouseenter="onEnterForward"
      @mouseleave="onLeaveForward">&middot;&middot;&middot;</span>
    <span :class="['u-item', {'active': currentPage===num}]" v-for="num in pageList" :key="num" @click="changePage(num)">{{ num }}</span>
    <span
      class="u-ellipsis"
      ref="backward"
      v-show="backwardMore"
      @click="onBackward"
      @mouseenter="onEnterBackward"
      @mouseleave="onLeaveBackward">&middot;&middot;&middot;</span>
    <span class="u-item txt" :class="{'disabled': currentPage===totalPage}" @click="changePage(currentPage + 1)">下一页</span>
    <span class="u-item txt" :class="{'disabled': currentPage===totalPage}" @click="changePage(totalPage)">尾页</span>
    <span class="u-jump-page">跳至<input type="text" v-model="jumpNumber"/>页</span>
    <span class="u-item txt" @click="jumpPage(jumpNumber)">确定</span>
  </div>
</template>
<script>
export default {
  name: 'Pager',
  data () {
    return {
      currentPage: this.pageNumber, // 当前页码
      currentSize: this.pageSize, // 分页数
      jumpNumber: '', // 跳转的页码
      forwardMore: false, // 左箭头展示
      backwardMore: false // 右箭头展示
    }
  },
  props: {
    pageNumber: { // 当前页面
      type: Number,
      default: 1
    },
    pageSize: { // 每页显示数量 [10条/页 20条/页 30条/页 40条/页]
      type: Number,
      default: 10
    },
    totalCount: { // 总条数
      type: Number,
      default: 0
    },
    pageListNum: { // 显示的页码数组长度
      type: Number,
      default: 5
    }
  },
  computed: {
    totalPage () { // 总页数
      return Math.ceil(this.totalCount / this.currentSize) // 向上取整
    },
    pageList () { // 获取显示的页码数组
      return this.dealPageList(this.currentPage)
    }
  },
  watch: {
    currentPage (to, from) {
      // 通过更改当前页码,修改分页数据
      this.$emit('changePage', { currentPage: to, currentSize: this.currentSize })
    }
  },
  created () {
    // 监听键盘Enter按键
    document.onkeydown = (e) => {
      const ev = e || window.event
      if (ev && ev.keyCode === 13 && this.jumpNumber) {
        this.jumpPage(this.jumpNumber)
      }
    }
  },
  methods: {
    dealPageList (curPage) {
      var resList = []
      var offset = Math.floor(this.pageListNum / 2) // 向下取整
      var pager = {
        start: curPage - offset,
        end: curPage + offset
      }
      if (pager.start < 1) {
        pager.end = pager.end + (1 - pager.start)
        pager.start = 1
      }
      if (pager.end > this.totalPage) {
        pager.start = pager.start - (pager.end - this.totalPage)
        pager.end = this.totalPage
      }
      if (pager.start < 1) {
        pager.start = 1
      }
      if (pager.start > 1) {
        this.forwardMore = true
      } else {
        this.forwardMore = false
      }
      if (pager.end < this.totalPage) {
        this.backwardMore = true
      } else {
        this.backwardMore = false
      }
      // 生成要显示的页码数组
      for (let i = pager.start; i <= pager.end; i++) {
        resList.push(i)
      }
      return resList
    },
    onEnterForward () {
      this.$refs.forward.innerhtml = '&laquo;'
    },
    onLeaveForward () {
      this.$refs.forward.innerHTML = '&middot;&middot;&middot;'
    },
    onEnterBackward () {
      this.$refs.backward.innerHTML = '&raquo;'
    },
    onLeaveBackward () {
      this.$refs.backward.innerHTML = '&middot;&middot;&middot;'
    },
    onForward () {
      this.currentPage = this.currentPage - this.pageListNum > 0 ? this.currentPage - this.pageListNum : 1
    },
    onBackward () {
      this.currentPage = this.currentPage + this.pageListNum < this.totalPage ? this.currentPage + this.pageListNum : this.totalPage
    },
    jumpPage (jumpNum) {
      if (Number(jumpNum)) {
        if (Number(jumpNum) < 1) {
          jumpNum = 1
        }
        if (Number(jumpNum) > this.totalPage) {
          jumpNum = this.totalPage
        }
        this.changePage(Number(jumpNum))
      }
      this.jumpNumber = '' // 清空跳转输入框
    },
    changePage (pageNum) {
      if (this.currentPage !== pageNum) { // 点击的页码不是当前页码
        this.currentPage = pageNum
      }
    }
  }
}
</script>
<style lang="less" scoped>
@themeColor: #D93844; // 自定义主题色
.m-pager-wrap {
  height: 32px;
  line-height: 30px;
  font-size: 14px;
  color: #888;
  text-align: center;
  .u-text {
    margin-right: 5px;
  }
  .u-item {
    margin-right: 5px;
    min-width: 30px;
    display: inline-block;
    user-select: none; // 禁止选取文本
    border: 1px solid #d9d9d9;
    border-radius: 4px;
    cursor: pointer;
    &:hover {
      .active();
    }
  }
  .active {
    color: #fff;
    background: @themeColor;
    border: 1px solid @themeColor;
  }
  .disabled {
    color: rgba(0,0,0,.25);
    &:hover {
      cursor: not-allowed;
      color: rgba(0,0,0,.25);
      background: #fff;
      border: 1px solid #d9d9d9;
    }
  }
  .txt {
    padding: 0 6px;
  }
  .u-ellipsis {
    display: inline-block;
    width: 12px;
    padding: 0 8px;
    margin-right: 5px;
    cursor: pointer;
    &:hover {
      color: @themeColor;
    }
  }
  .u-jump-page {
    margin: 0 8px 0 3px;
    input {
      width: 32px;
      height: 20px;
      padding: 5px 8px;
      margin: 0 5px;
      border: 1px solid #d9d9d9;
      border-radius: 4px;
      text-align: center;
    }
  }
}
</style>

②在要使用的页面引入分页器:

<div class="m-page">
    <Pager
        @changePage="jumpPage"
        :totalCount="totalCount"
        :pageNumber="queryParams.p"
        :pageSize="queryParams.pageSize" />
</div>
 
import Pager from '@/components/Pager'
components: {
    Pager
}
totalCount: 0,
queryParams: {
        pageSize: 10,
        p: 1,
        mod: 'search'
},
 
jumpPage (e) {
      this.queryParams.p = e.currentPage
      this.queryParams.pageSize = e.currentSize
      this.getDataLists() // 调用接口获取列表数据
}
 
.m-page {
  margin: 30px auto 60px;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Vue分页器组件使用方法详解

本文链接: https://www.lsjlt.com/news/141121.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue分页器组件使用方法详解
    本文实例为大家分享了Vue分页器组件的使用,供大家参考,具体内容如下 效果图如下: 鼠标悬浮时切换为箭头: ①创建自定义分页组件Pager.vue:预设主题色为@themeCol...
    99+
    2022-11-13
  • JavaScript分页组件使用方法详解
    分页组件是web开发中常见的组件,请完成pagination函数,在id为jsPagination的DOM元素中完成分页的显示部分,需求如下 1、最多连续显示5页,居中高亮显示cur...
    99+
    2022-11-12
  • Vue中ElementUI分页组件Pagination的使用方法
    Vue中ElementUI分页组件Pagination的使用,供大家参考,具体内容如下 一、概要 ElementUI 提供了 el-pagination 组件,只要配置相应得参数和事...
    99+
    2022-11-12
  • vue滑动解锁组件使用方法详解
    本文实例为大家分享了vue滑动解锁组件的使用,供大家参考,具体内容如下 这是一个pc端的滑动解锁组件 效果图: 话不多说,直接上代码 html部分 <template>...
    99+
    2022-11-13
  • Vue滑块解锁组件使用方法详解
    本文实例为大家分享了Vue滑块解锁组件的使用,供大家参考,具体内容如下 依据 JS拖动滑块验证 开发的 Vue 滑块解锁组件。 <template>   <div ...
    99+
    2022-11-13
  • vue封装自定义分页器组件与使用方法分享
    前言 分页是开发各种系统时候最常用的功能,下面为本人封装的一个分页组件。 实现分页器操作需要以下参数 当前页: pageNo每页展示条数: pageSize数据总条数 : total...
    99+
    2022-11-12
  • vue验证码组件使用方法详解
    本文实例为大家分享了vue验证码组件使用的具体实现代码,供大家参考,具体内容如下 代码如下: <template> <div class="join...
    99+
    2022-11-12
  • Vue对话框组件使用方法详解
    本文实例为大家分享了Vue对话框组件的使用,供大家参考,具体内容如下 效果如下图所示:(整体样式模仿ant-design-vue Modal样式,同时阴影覆盖浏览器窗口) ①创建组...
    99+
    2022-11-13
  • Vue分页组件的封装方法
    前言 这个是基于vue2的分页封装,仿照elementUI而写的组件。 效果如图 话不多说,直接上代码 <template>   <div class="pagi...
    99+
    2022-11-13
  • Vue分页组件实现过程详解
    目录组件的一些规定和条件创建分页数组切换页码CSS HTML代码 <template> <div class="paging" v-if="count"...
    99+
    2022-12-09
    Vue分页组件封装 Vue分页组件原理
  • Vue自嵌套树组件使用方法详解
    本文实例为大家分享了Vue自嵌套树组件的使用方法,供大家参考,具体内容如下 效果图 注意事项 组件自嵌套,定义名称时就定义为组件名 单选和多选用户时...
    99+
    2022-11-12
  • vue车牌搜索组件使用方法详解
    一个简单的车牌输入组件(vue),供大家参考,具体内容如下 代码: vue代码: <template> <div class="pulls"> ...
    99+
    2022-11-12
  • vue车牌输入组件使用方法详解
    一个简单的车牌输入组件(vue),供大家参考,具体内容如下 效果图: vue代码: <template> <div class="enTer">...
    99+
    2022-11-12
  • vue加载天气组件使用方法详解
    本文实例为大家分享了vue加载天气组件的使用方法,供大家参考,具体内容如下 首先我们进入中国天气网生成一段代码 根据需要设置天气样式 复制并修改生成的这段代码到vue中 将scr...
    99+
    2022-11-12
  • Vue跑马灯marquee组件使用方法详解
    本文实例为大家分享了Vue跑马灯marquee组件的具体代码,供大家参考,具体内容如下 一、实现效果 二、实现过程 前言:最开始用间隔器方案制作了一个跑马灯,但是放在移动端中会出现...
    99+
    2022-11-13
  • Vue日期时间选择器组件使用方法详解
    本文实例为大家分享了Vue日期时间选择器组件的具体代码,供大家参考,具体内容如下 1.效果图如下 单选日期选择器 多选日期选择器 日期时间选择器 2.准备 Date原型格式化工...
    99+
    2022-11-12
  • Vue子组件调用父组件方法案例详解
    一、直接在子组件中通过this.$parent.event来调用父组件的方法 <!-- 父组件 --> <template> <div> ...
    99+
    2022-11-12
  • Vue加载中动画组件使用方法详解
    本文实例为大家分享了Vue加载中动画组件的使用,供大家参考,具体内容如下 (模仿ant-design加载中样式)效果图如下: ①创建Loading.vue组件: <templ...
    99+
    2022-11-13
  • vue封装自定义分页器组件与使用方法是什么
    这篇文章给大家介绍vue封装自定义分页器组件与使用方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言分页是开发各种系统时候最常用的功能,下面为本人封装的一个分页组件。实现分页器操作需要以下参数当前页: pag...
    99+
    2023-06-26
  • Bootstrap中分页组件的使用方法
    这篇文章主要介绍Bootstrap中分页组件的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概述在Bootstrap框架中提供了两种分页导航:☑   带页码的分页导航☑   带翻页的分页导...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作