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;">
px
+ @click="handleScrollToTop">
回到顶部
@@ -38,8 +38,10 @@
+ v-for="i in 10"
+ :key="i"
+ :style="articleStyle"
+ long/>