基于Vuejs框架实现翻页组件_javascript技巧

翻页功能对前端后端都是个难题啊!今天终于给踩了!哈哈!整理下方法,我是基于vueJs写的,同样适用于angular哈!

封装下载地址:vue.js翻页组件  

效果截图:

整体实现逻辑,当用户点击页码时,ajax从后端获取数据,包括:records(当前页查询到的记录),totalRecords: 121(所有记录),currentPage(当前页码),totalPage(总页码),size(当前页显示数量),之后用我封装的算法assemblePageTurnerParams,算出页面展示哪些页码。

不得不说,我考虑的很全面的哈!!页码多的时候显示省略号,页码少的时候,则显示的少!

源码如下:

html

<!DOCTYPE html>
<html>
<head>
 <title>vue翻页</title>
 <link rel="stylesheet" type="text/css" href="css/pageTurner.css">
</head>
<body class="myApp">
 <div class="wrapper">
 <p class="records">当前展示 {{ pageTurner.records }} 条记录,共{{ pageTurner.totalRecords }} 条记录</p>
 <ul class="page-turner-container clearfix">
  <li v-on:click="queryData(pageTurner.currentPage-1)">«</li>
  <!-- 首页 -->
  <li v-on:click="queryData(1)" :class="pageTurner.currentPage == 1 ? 'current-page' : '' ">1</li>
  <li v-if="pageTurner.currentPage>4 && pageTurner.totalPage>7" class="omit">...</li> 

  <!-- 展示页 -->
  <li v-for="page in pageTurner.displayPageList" :class="page == pageTurner.currentPage ? 'current-page' : '' " v-on:click="queryData(page)">{{ page }}</li> 

  <!-- 尾页 -->
  <li v-if="pageTurner.currentPage<pageTurner.totalPage-3 && pageTurner.totalPage>7 " class="omit" >...</li>
  <li v-on:click="queryData(pageTurner.totalPage)" :class="pageTurner.currentPage == pageTurner.totalPage ? 'current-page' : '' " v-if="pageTurner.totalPage != 1 && pageTurner.totalPage>6">{{ pageTurner.totalPage }}</li>
  <li v-on:click="queryData(pageTurner.currentPage+1)">»</li>
 </ul>
 </div> 

 <script type="text/javascript" src="lib/vue.js"></script>
 <script type="text/javascript" src="pageTurner.js"></script>
</body>
</html> 

vue

//ajax返回json
//{"status":true,"msg":"ok","data":{"accidentList":[{"token":"Mw==","accidentStatus":"triggered","endTime":"------------","continueTime":"------------","accidentStatusFriend":"\u5f85\u63a5\u624b","id":"3","enId":"11","currentLevelNum":"0","curDuty":[{"id":"4420","name":"zhaopeng1","type":"member"}],"curPolicyId":"2","createTime":"2016-08-24 15:43:10","description":"{\"level\":1,\"genre\":2,\"from\":\"10.103.11.21\",\"info\":\"XX\u786c\u4ef6Fail\",\"detail\":\"XX\u786c\u4ef6Fail\u53ef\u80fd\u7684\u539f\u56e0\u662fXXX\uff0c\u5efa\u8baeXXX\"}","level":1,"genre":2,"from":"10.103.11.21","info":"XX\u786c\u4ef6Fail","serviceName":"ceshi"},{"token":"Mg==","accidentStatus":"triggered","endTime":"------------","continueTime":"------------","accidentStatusFriend":"\u5f85\u63a5\u624b","id":"2","enId":"10","currentLevelNum":"0","curDuty":[{"id":"4420","name":"zhaopeng1","type":"member"}],"curPolicyId":"2","createTime":"2016-08-24 15:43:07","description":"{\"level\":1,\"genre\":2,\"from\":\"10.103.11.21\",\"info\":\"XX\u786c\u4ef6Fail\",\"detail\":\"XX\u786c\u4ef6Fail\u53ef\u80fd\u7684\u539f\u56e0\u662fXXX\uff0c\u5efa\u8baeXXX\"}","level":1,"genre":2,"from":"10.103.11.21","info":"XX\u786c\u4ef6Fail","serviceName":"ceshi"},{"token":"MQ==","accidentStatus":"triggered","endTime":"------------","continueTime":"------------","accidentStatusFriend":"\u5f85\u63a5\u624b","id":"1","enId":"9","currentLevelNum":"0","curDuty":[{"id":"4420","name":"zhaopeng1","type":"member"}],"curPolicyId":"1","createTime":"2016-08-24 15:31:59","description":"{\"level\":1,\"genre\":2,\"from\":\"10.103.11.21\",\"info\":\"XX\u786c\u4ef6Fail\",\"detail\":\"XX\u786c\u4ef6Fail\u53ef\u80fd\u7684\u539f\u56e0\u662fXXX\uff0c\u5efa\u8baeXXX\"}","level":1,"genre":2,"from":"10.103.11.21","info":"XX\u786c\u4ef6Fail","serviceName":"nimi"}],"pageParams":{"records":"12","totalRecords":"121","currentPage":"2","totalPage":"18","size":12}}} 

//前4个属性是后台返回的,前端计算displayPageList展示列表
var pageTurnerDefaultParams = {
 records: 9,
 totalRecords: 121,
 currentPage: 1,
 totalPage: 1,
 size: 12,
 displayPageList: [3,4,5,6,7]
}; 

var assemblePageTurnerParams = function(records,totalRecords,currentPage,totalPage,size){
 var records = records;
 var totalRecords = totalRecords;
 var currentPage = currentPage;
 var totalPage = totalPage;
 var size = size;
 var displayPageList = []; 

 var firstPage = ''
 //第一页时 翻上页
 if(currentPage<1){
 console.log('已经是第一页了!!')
 currentPage = 1
 }
 //最后一个 翻下页
 else if(currentPage>totalPage){
 console.log('已经是最后一页了!!')
 currentPage = totalPage
 } 

 //总页数小于7页
 if (totalPage<7){
 console.log('总页数小于7页!')
 //console.log('总页数:' + totalPage)
 for (var j=2; j<=totalPage; j++){
  //console.log(j)
  displayPageList.push(j)
 }
 }
 //总页数大于等于7页
 else{
 console.log('总页数大于等于7页!')
 if (currentPage<5){
  console.log('点击的页面小于5')
  firstPage = 2
 }
 // else if (currentPage<6){
 // console.log('点击的页面小于6')
 // firstPage = 3
 // }
 else if(currentPage>totalPage-3){
  console.log('点击的页码大于总页码-3了')
  firstPage = totalPage - 5
 }
 else{
  firstPage = currentPage-2;
 } 

 for (var i=firstPage; i<firstPage+5; i++){
  displayPageList.push(i)
 }
 } 

 var params = {
 records: records,
 totalRecords: totalRecords,
 currentPage: currentPage,
 totalPage: totalPage,
 size: size,
 displayPageList: displayPageList
 } 

 return params
}; 

var pageTurnerController = new Vue({
 el: '.myApp',
 data: {
 pageTurner: pageTurnerDefaultParams
 },
 ready: function() {
 //首次查询时 传递查询第一页和pageSize
 this.queryData(1)
 },
 methods: {
 queryData:function(page){
  //do ajax here
  //从后台获取到records totalRecords totalPage size
  //用assemble方法计算出所有翻页相关的参数
  //assemblePageTurnerParams 的4个参数 records totalRecords page totalPage pageSize
  this.pageTurner = assemblePageTurnerParams(11,121,page,10,12)
  console.log(JSON.stringify(this.pageTurner))
  console.log('跳转到' + this.pageTurner.currentPage)
 }
 }
});

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索组件
, 翻页
vue.js
vue 组件、vue ui组件库、vue 组件库、vue父子组件通信、vue2.0 ui组件库,以便于您获取更多的相关知识。

时间: 2024-08-03 02:26:17

基于Vuejs框架实现翻页组件_javascript技巧的相关文章

Bootstrap CSS组件之分页(pagination)和翻页(pager)_javascript技巧

几乎所有网站内容都需要分页显示,一个用户体验良好的分页组件会得到访问用户的良好评价. //源码 .pagination { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 4px; } .pagination > li { display: inline; } .pagination > li > a, .pagination > li > span { position: rela

基于vuejs+webpack的日期选择插件_javascript技巧

基于vuejs+webpack环境使用的日期选择插件,希望大家喜欢. 支持单选和多选日期 支持限定开始和结束日期范围选择. 支持小时分钟 需要引入fontawesome.io 的图标库. Options :show 是否显示 :type date|datetime :value 默认值 :begin 可选开始时间 :end 可选结束时间 :x 显示x坐标 :y 显示y坐标 :range 是否多选 test.vue <template> <input type="text&quo

一个JS翻页效果_javascript技巧

<IFRAME border=0 align=center marginWidth=0 marginHeight=0 src="1.htm" frameBorder=no width=200 scrolling=no height=200 style="border: 1px solid #CCCCCC" id="pic"></IFRAME> <a href="javascript:Page(-1)&quo

基于Vue.js的表格分页组件_javascript技巧

一.Vue.js简介1.Vue的主要特点: (1) 简洁 (2) 轻量 (3)快速 (4) 数据驱动 (5) 模块友好 (6) 组件化(1) 简洁 下面看一段Angular的实现双向绑定的代码 // html <body ng-app="myApp"> <div ng-controller="myCtrl"> <p>{{ note }}</p> <input type="text" ng-mo

不错的Javascript表格翻页效果_javascript技巧

共 6 页 当前第 1 页 第一页 上一页 下一页 最后一页 转到第123456页 标题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

javascript基于HTML5 canvas制作画箭头组件_javascript技巧

样例: 废话少说,直接上代码: arrow.js /** * 实现两点间画箭头的功能 * @author mapleque@163.com * @version 1.0 * @date 2013.05.23 */ ;(function(window,document){ if (window.mapleque==undefined) window.mapleque={}; if (window.mapleque.arrow!=undefined) return; /** * 组件对外接口 */

BootStrap整体框架之基础布局组件_javascript技巧

1 基础布局组件 在12栅格系统上基础上,BootStrap还提供了多种基础布局组件. CSS组件,总结为8大类型的样式: 基础样式.颜色样式.尺寸样式.状态样式.特殊元素样式.并列元素样式.嵌套子元素样式.动画样式 1.1基础样式 基本样式,一般包含文本字体,颜色背景,边框,定位等,如下面警告框: //源码 .alert { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px

javascript 支持ie和firefox杰奇翻页函数_javascript技巧

<script type="text/javascript"><!--var preview_page = "{?$preview_page?}";var next_page = "{?$next_page?}";var index_page = "{?$index_page?}";var article_id = "{?$article_id?}";var chapter_id = &q

如何通过vue实现一款简单通用的翻页组件

预览 先上一波效果图: 基本元素 首先,翻页组件(以下称"pager组件")一般拥有的元素有: 上一页 第一页 中间显示的页码 最后一页 下一页 初始化时需要的配置有: totalPage(总页数) initPage(初始页) showPrev(是否显示上一页) showNext(是否显示下一页) showItems(中间显示几页) showJump(是否显示跳转到第几页) 这些可以通过vue的props来接收. 另外,pager组件本身需要有一个记录当前页的currentPage,p