diff --git a/src/components/BackToTop/index.vue b/src/components/BackToTop/index.vue index 10aaef1b..12cda74f 100644 --- a/src/components/BackToTop/index.vue +++ b/src/components/BackToTop/index.vue @@ -1,9 +1,12 @@ @@ -18,18 +21,39 @@ export default { backPosition: { type: Number, default: 0 + }, + customStyle: { + type: Object, + default: { + right: '50px', + bottom: '50px', + width: '40px', + height: '40px', + 'border-radius': '4px', + 'line-height': '40px', + background: '#e7eaf1' + } + }, + transitionName: { + type: String, + default: 'fade' } + }, data() { return { - visible: false + visible: false, + interval: null } }, mounted() { - window.addEventListener('scroll', this.handleScroll) + window.addEventListener('scroll', this.handleScroll); }, beforeDestroy() { - window.removeEventListener('scroll', this.handleScroll) + window.removeEventListener('scroll', this.handleScroll); + if (this.interval) { + clearInterval(this.interval); + } }, methods: { handleScroll() { @@ -38,11 +62,11 @@ export default { backToTop() { const start = window.pageYOffset; let i = 0; - const t = setInterval(() => { + this.interval = setInterval(() => { const next = Math.floor(this.easeInOutQuad(10 * i, start, -start, 500)); if (next <= this.backPosition) { window.scrollTo(0, this.backPosition); - clearInterval(t) + clearInterval(this.interval) } else { window.scrollTo(0, next); } @@ -59,21 +83,18 @@ export default { diff --git a/src/views/components/backToTop.vue b/src/views/components/backToTop.vue index b20bbcfe..ecf39575 100644 --- a/src/views/components/backToTop.vue +++ b/src/views/components/backToTop.vue @@ -1,6 +1,8 @@