vue 分页器组件+css动画效果

2023-11-17

全网都找了一遍没有找到符合UI需求的分页动画,于是就主动上手了

需求:

1、分页最多显示9页,总页数最多显示无上限;

2、点击下一页的时候需要有动画效果过度,如果当前页数是当前显示最后的一页,则停了当前显示最后的位置,但是点击下一页的时候需要用户感知

效果如图所示:

1、代码如下:

 
<template>
  <div><br>当前显示页面{{current}}
    <div class="pagination">
      <div @click="prevPage">上一页</div>
      <div v-for="(item, index) in totalPages" :key="index" :class="{ 'active': current == item }">
        <div v-if="node.indexOf(item) != -1" class="point"></div>
      </div>
      <div @click="nextPage">下一页</div>
    </div>
  </div>
</template>
 
<script>
export default {
  name: 'Pagination',
  props: {
    totalPages: {
      type: Number,
      required: true
    },
    pageSize: {
      type: Number
    }
  },
  data() {
    return {
      current: 1, // 当前选中页
      node: [], // 当前显示的页数组
    }
  },
  methods: {
    prevPage() {
      if (this.current == 1) {
        return
      }
      this.current -= 1
      let noedeIndex = this.node[this.node.length - 1]
      this.$emit('pageChange', this.current)
      if ((noedeIndex - (this.current - 1)) > this.pageSize) {
        this.node.pop() // 删除最后一个
        this.node.unshift(this.current) // 开头插入一个
      }
    },

    nextPage() {
      if (this.current == this.totalPages) {
        return
      }
      this.current += 1
      this.$emit('pageChange', this.current)
      let noedeIndex = this.node[this.node.length - 1]
      // 当前页不等于最后一页,当前页大于等于展示页,当前页大于缓存数组的最后一页(确保重复加入)
      if (this.current > this.pageSize && (this.current > noedeIndex)) {
        this.node.shift() // 删除第一个
        this.node.push(this.current) // 最近最新一个
      }
    },
  },
  mounted() {
    for (let i = 1; i <= this.pageSize; i++) {
      this.node.push(i)
    }
  },
}
</script>

<style lang="less" scoped>
.pagination {
  display: flex;
  width: 100%;
  justify-content: center;
}

.point {
  margin: 0 5px;
  width: 8px;
  height: 8px;
  // margin: -5px 0 0 0;
  border-radius: 50%;
  background: #B5AC97;
  transition: transform 0.3s, background 0.3s;

}

.active .point {
  -webkit-transform: scale3d(1.5, 1.5, 1);
  transform: scale3d(1.5, 1.5, 1);
  // width: 10px;
  // height: 10px;
  background: #FFE6AD;
  box-shadow: 0 0 4px 0 #FFE990;
  animation: 0.3s linear 0s 1 alternate example;

}

@keyframes example {
  0% {
    transform: scale3d(1, 1, 1);
  }

  25% {
    transform: scale3d(1, 1, 1);
  }

  50% {
    transform: scale3d(1.5, 1.5, 1);
  }

  100% {
    transform: scale3d(1.5, 1.5, 1);
  }
}
</style>

2、引用方式

 
<template>
	<div>
		<pagination :total-pages="totalPages" :page-size="9" @pageChange="handlePageChange" />
	</div>
</template>
 
<script>
import Pagination from './views/Pagination.vue'

export default {
	components: {
		Pagination
	},
	data() {
		return {
			totalPages: 25,
		}
	},
	computed: {

	},
	methods: {
		handlePageChange(page) {
			console.log('page: ', page);
		}
	}
}
</script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue 分页器组件+css动画效果 的相关文章

随机推荐

  • 完整的Apache+PHP8+MYSQL的配置

    1 下载Apache和PHP 下载Apache 地址 http www apachelounge com download 如下图 将下载的压缩包解压到某个文件夹 比如 D software 将解压后的文件夹重命名为Apache24 下载P
  • Flask笔记1

    Flask笔记 首先明确一下 要运行一个动态网页 我们需要 一个 Web 服务器来监听并响应请求 如果请求的是静态文件它就直接将其返回 如果是动态 url 它就将请求转交给 Web 应用 一个 Web 应用来动态处理请求 生成响应 其中 W
  • 可汗学院统计学笔记

    假设检验 假设检验和参数估计是统计推断里面两个重要的组成部分 两个知识点从不同方面来对统计推断做出阐述 参数估计是通过样本的统计量估计总体的参数 从而衍生出了点估计和区间估计 假设检验则是首先做出一个假设 进而验证这个假设的真实性 就比如说
  • 开心档之Git Gitee

    Git Gitee 大家都知道国内访问 Github 速度比较慢 很影响我们的使用 如果你希望体验到 Git 飞一般的速度 可以使用国内的 Git 托管服务 Gitee gitee com Gitee 提供免费的 Git 仓库 还集成了代码
  • 【Windows】你所使用的用户账户没有启用此任务的权限

    Windows 你所使用的用户账户没有启用此任务的权限 1 故障现象 有一台腾讯云的服务器更新补丁 更新后需要禁用自动重启 发生了以下报错 2 解决方法 2 1 下载pstools 工具下载地址 https learn microsoft
  • Dubbo源码解析:服务暴露与发现

    dubbo源码解析 服务暴露与发现 概述 dubbo是一个简单易用的RPC框架 通过简单的提供者 消费者配置就能完成无感的网络调用 那么在dubbo中是如何将提供者的服务暴露出去 消费者又是如何获取到提供者相关信息的呢 这就是本章我们要讨论
  • dubbo 项目既是提供方又是消费方,调用不到服务问题

    1 先查看服务提供者有没有注册 这里通过安装eclipse中的zookeeper插件 进行了查看 服务已经注册上了 2 注册上以后 查看调用者有没有在zookeeper中注册 此时通过查看 并没有 3 没有注册上 然后查看是否是配置哪里出了
  • vue cl3、vuex、vue-router、ant design vue、axios搭建一个简易的单页面应用

    源码码云 https gitee com ChinaCYZ zhengyekeji 在线演示地址 http cheyouzheng top test index html 找工作时 发现一套不错的前端机试题 分享给大家 之前都是使用原生JS
  • 主题模型的概述与Python实现

    主题模型的概述与Python实现 主题模型是一种用于发现文本数据中隐藏主题的统计模型 它可以帮助我们理解大规模文本数据集中的主题结构 并从中提取出关键信息 在本文中 我们将介绍主题模型的基本概念 并使用Python来实现一个简单的主题模型
  • linux应用之mysql8安装

    1 安装前工作 在安装前需要确定现在这个系统有没有 mysql 如果有那么必须卸载 在 centos7 自带的是 mariaDb 数据库 所以第一步是卸载数据库 查看mariadb数据库 rpm qa grep mariadb 卸载mari
  • Linux关闭防火墙命令(永久性关闭)

    抛开实际生产环境 个人平时练习的时候安装虚拟机可能遇到过很多坑就很烦 可能很大一部分原因都是防火墙没关掉哈哈哈哈所以建议永久性关闭防火墙 下面是CentOs7关闭防火墙的命令 1 查看防火状态 systemctl status firewa
  • vue3中的useAttrs和props的区别

    在vue3中 提供了一个 useAttrs 的方法 它接收到的参数一 prop中可以接收到的数据是基本一样的 如果我们想自已写一个组件 把 elementPlus 中的期中一个组件封装一下 可以这样做 1 新建一个 自定义组件 myBtnC
  • 图解 Dijkstra、Floyd、BellMan-Ford 最短路径算法

    文章目录 导言 一 迪杰斯特拉算法 Dijkstra 1 概述 2 算法描述 3 图片解释 4 Dijkstra算法实现 5 Dijkstra Heap算法实现 二 弗洛伊德算法 Floyd Warshall 1 概述 2 算法描述 3 算
  • PowerVM 的主要组成部分及概念

    PowerVM 是在基于 IBM POWER 处理器的硬件平台上提供的具有行业领先水平的虚拟化技术家族 它是 IBM Power System 虚拟化技术全新和统一的品牌 逻辑分区 微分区 Hypervisor 虚拟 I O 服务器 APV
  • 树型结构——二叉数

    之前就说过我们的数据结构分为两种 分别是线性结构和非线性结构 我们今天要学的第一种线性结构就是树型结构 1 树型结构 树型结构并非我们熟悉的重点 所以在这里只做了解 概念 树是一种非线性的数据结构 它是由n n gt 0 个有限结点组成一个
  • 【操作系统】王道考研 p40 两级页表

    两级页表 知识总览 单级页表存在的问题 问题1 页表必须连续存放 因此当页表很大时 需要占用很多个连续的页框 问题2 由程序的局部性原理 进程在一段时间内只需要访问某几个页面就可以正常运行了 因此没必要让整个页表都常驻内存 如何解决单级页表
  • 国内外遥感卫星及遥感传感器

    文章基本信息概要 作者 doll CJ 文章编号 001 C C为综合基础文章 S为分级细化文章 P为应用实践文章 E为补充性文章 内容整理周期 2023年4月24日 2023年5月2日 文章提交日期 2023年5月2日 摘要 Abstra
  • 查看并修改Oracle用户的密码(适用于11g)

    如果你的 数据库版本低于 11g请参考 http www 51testing com index php uid 364865 action viewspace itemid 222982 有时候我们可能不知道一个用户的 密码 但是又需要以
  • 【微调视觉-语言模型】Learning to Prompt for Vision-Language Models

    微调视觉 语言模型 Learning to Prompt for Vision Language Models 代码地址 论文简介 动机和思路 具体实现 Vision Language Pre training Context Optimi
  • vue 分页器组件+css动画效果

    全网都找了一遍没有找到符合UI需求的分页动画 于是就主动上手了 需求 1 分页最多显示9页 总页数最多显示无上限 2 点击下一页的时候需要有动画效果过度 如果当前页数是当前显示最后的一页 则停了当前显示最后的位置 但是点击下一页的时候需要用