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