mescroll.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <template>
  2. <div ref="mescroll" class="mescroll">
  3. <div>
  4. <slot></slot>
  5. </div>
  6. </div>
  7. </template>
  8. <script>
  9. // 引入mescroll.min.js和mescroll.min.css
  10. import MeScroll from 'mescroll.js'
  11. import 'mescroll.js/mescroll.min.css'
  12. export default {
  13. name: 'MeScrollVue',
  14. data: function () {
  15. return {
  16. mescroll: null,
  17. lastScrollTop: 0, // 路由切换时滚动条的位置
  18. lastBounce: null // 路由切换时是否禁止ios回弹
  19. }
  20. },
  21. props: {
  22. up: Object,
  23. down: Object
  24. },
  25. mounted: function () {
  26. this.mescroll = new MeScroll(this.$refs.mescroll, {
  27. up: this.up,
  28. down: this.down
  29. })
  30. this.$emit('init', this.mescroll) // init回调mescroll对象
  31. },
  32. methods: {
  33. beforeRouteEnter () {
  34. if (this.mescroll) {
  35. // 滚动到之前列表的位置
  36. if (this.lastScrollTop) {
  37. this.mescroll.setScrollTop(this.lastScrollTop)
  38. setTimeout(() => { // 需延时,因为setScrollTop内部会触发onScroll,可能会渐显回到顶部按钮
  39. this.mescroll.setTopBtnFadeDuration(0) // 设置回到顶部按钮显示时无渐显动画
  40. }, 16)
  41. }
  42. // 恢复到之前设置的isBounce状态
  43. if (this.lastBounce != null) this.mescroll.setBounce(this.lastBounce)
  44. }
  45. },
  46. beforeRouteLeave () {
  47. if (this.mescroll) {
  48. this.lastScrollTop = this.mescroll.getScrollTop() // 记录当前滚动条的位置
  49. this.mescroll.hideTopBtn(0) // 隐藏回到顶部按钮,无渐隐动画
  50. this.lastBounce = this.mescroll.optUp.isBounce // 记录当前是否禁止ios回弹
  51. this.mescroll.setBounce(true) // 允许bounce
  52. }
  53. }
  54. }
  55. }
  56. </script>
  57. <style>
  58. </style>