parent
7a7b91a02f
commit
a6f3e31e71
@ -0,0 +1,101 @@ |
|||||||
|
<template> |
||||||
|
<div :class="{'hidden':hidden}" class="pagination-container"> |
||||||
|
<el-pagination |
||||||
|
:background="background" |
||||||
|
:current-page.sync="currentPage" |
||||||
|
:page-size.sync="pageSize" |
||||||
|
:layout="layout" |
||||||
|
:page-sizes="pageSizes" |
||||||
|
:total="total" |
||||||
|
v-bind="$attrs" |
||||||
|
@size-change="handleSizeChange" |
||||||
|
@current-change="handleCurrentChange" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { scrollTo } from '@/util/scroll-to' |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'Pagination', |
||||||
|
props: { |
||||||
|
total: { |
||||||
|
required: true, |
||||||
|
type: Number |
||||||
|
}, |
||||||
|
page: { |
||||||
|
type: Number, |
||||||
|
default: 1 |
||||||
|
}, |
||||||
|
limit: { |
||||||
|
type: Number, |
||||||
|
default: 20 |
||||||
|
}, |
||||||
|
pageSizes: { |
||||||
|
type: Array, |
||||||
|
default() { |
||||||
|
return [10, 20, 30, 50] |
||||||
|
} |
||||||
|
}, |
||||||
|
layout: { |
||||||
|
type: String, |
||||||
|
default: 'total, sizes, prev, pager, next, jumper' |
||||||
|
}, |
||||||
|
background: { |
||||||
|
type: Boolean, |
||||||
|
default: true |
||||||
|
}, |
||||||
|
autoScroll: { |
||||||
|
type: Boolean, |
||||||
|
default: true |
||||||
|
}, |
||||||
|
hidden: { |
||||||
|
type: Boolean, |
||||||
|
default: false |
||||||
|
} |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
currentPage: { |
||||||
|
get() { |
||||||
|
return this.page |
||||||
|
}, |
||||||
|
set(val) { |
||||||
|
this.$emit('update:page', val) |
||||||
|
} |
||||||
|
}, |
||||||
|
pageSize: { |
||||||
|
get() { |
||||||
|
return this.limit |
||||||
|
}, |
||||||
|
set(val) { |
||||||
|
this.$emit('update:limit', val) |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
handleSizeChange(val) { |
||||||
|
this.$emit('pagination', { page: this.currentPage, limit: val }) |
||||||
|
if (this.autoScroll) { |
||||||
|
scrollTo(0, 800) |
||||||
|
} |
||||||
|
}, |
||||||
|
handleCurrentChange(val) { |
||||||
|
this.$emit('pagination', { page: val, limit: this.pageSize }) |
||||||
|
if (this.autoScroll) { |
||||||
|
scrollTo(0, 800) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
.pagination-container { |
||||||
|
background: #fff; |
||||||
|
padding: 32px 16px; |
||||||
|
} |
||||||
|
.pagination-container.hidden { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,64 @@ |
|||||||
|
Math.easeInOutQuad = function(t, b, c, d) { |
||||||
|
t /= d / 2 |
||||||
|
if (t < 1) { |
||||||
|
return c / 2 * t * t + b |
||||||
|
} |
||||||
|
t-- |
||||||
|
return -c / 2 * (t * (t - 2) - 1) + b |
||||||
|
} |
||||||
|
|
||||||
|
// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts
|
||||||
|
var requestAnimFrame = (function() { |
||||||
|
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) } |
||||||
|
})() |
||||||
|
|
||||||
|
/** |
||||||
|
* Because it's so fucking difficult to detect the scrolling element, just move them all |
||||||
|
* @param {number} amount |
||||||
|
*/ |
||||||
|
function move(amount) { |
||||||
|
const courseWrap = document.querySelector(".app-container") |
||||||
|
courseWrap.scrollTop = amount |
||||||
|
document.documentElement.scrollTop = amount |
||||||
|
document.body.parentNode.scrollTop = amount |
||||||
|
document.body.scrollTop = amount |
||||||
|
} |
||||||
|
|
||||||
|
function position() { |
||||||
|
// const courseItemWrap = document.querySelector('#courseItemWrap')
|
||||||
|
// console.log(document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop);
|
||||||
|
return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop || document.querySelector(".app-container").scrollTop |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param {number} to |
||||||
|
* @param {number} duration |
||||||
|
* @param {Function} callback |
||||||
|
*/ |
||||||
|
export function scrollTo(to, duration, callback) { |
||||||
|
console.log('comming scroll'); |
||||||
|
const start = position() |
||||||
|
console.log(start); |
||||||
|
const change = to - start |
||||||
|
const increment = 20 |
||||||
|
let currentTime = 0 |
||||||
|
duration = (typeof (duration) === 'undefined') ? 500 : duration |
||||||
|
var animateScroll = function() { |
||||||
|
// increment the time
|
||||||
|
currentTime += increment |
||||||
|
// find the value with the quadratic in-out easing function
|
||||||
|
var val = Math.easeInOutQuad(currentTime, start, change, duration) |
||||||
|
// move the document.body
|
||||||
|
move(val) |
||||||
|
// do the animation unless its over
|
||||||
|
if (currentTime < duration) { |
||||||
|
requestAnimFrame(animateScroll) |
||||||
|
} else { |
||||||
|
if (callback && typeof (callback) === 'function') { |
||||||
|
// the animation is done so lets callback
|
||||||
|
callback() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
animateScroll() |
||||||
|
} |
Loading…
Reference in new issue