diff --git a/src/components/d2-container/components/mixins/scroll.normal.js b/src/components/d2-container/components/mixins/scroll.normal.js index f057628b..8b118f44 100644 --- a/src/components/d2-container/components/mixins/scroll.normal.js +++ b/src/components/d2-container/components/mixins/scroll.normal.js @@ -45,6 +45,17 @@ export default { // 移除滚动事件监听 removeScrollListener () { this.$refs.body.removeEventListener('scroll', this.handleScroll) + }, + // 外部调用的方法 返回顶部 + scrollToTop () { + const smoothscroll = () => { + var currentScroll = this.$refs.body.scrollTop + if (currentScroll > 0) { + window.requestAnimationFrame(smoothscroll) + this.$refs.body.scrollTo(0, currentScroll - (currentScroll / 5)) + } + } + smoothscroll() } } } diff --git a/src/components/d2-container/index.js b/src/components/d2-container/index.js index cfc14871..dcf493d4 100644 --- a/src/components/d2-container/index.js +++ b/src/components/d2-container/index.js @@ -48,6 +48,7 @@ export default { class: 'container-component' }, [ h(this.component, { + ref: 'component', props: this.$attrs, on: { scroll: e => this.$emit('scroll', e) @@ -58,5 +59,11 @@ export default { props: this.$attrs }) : undefined ]) + }, + methods: { + // 返回顶部 + scrollToTop () { + this.$refs.component.scrollToTop() + } } } diff --git a/src/pages/demo/components/container/api.vue b/src/pages/demo/components/container/api.vue index 5e59ec01..bd4a4d86 100644 --- a/src/pages/demo/components/container/api.vue +++ b/src/pages/demo/components/container/api.vue @@ -8,16 +8,16 @@ :inline="true" size="mini"> + style="width: 120px;"> + @click="handleScrollToTop"> 回到顶部 @@ -38,8 +38,10 @@ + v-for="i in 10" + :key="i" + :style="articleStyle" + long/>