dynamic_demo_mixin.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /**
  2. * 动态参数演示mixin
  3. */
  4. module.exports = {
  5. data() {
  6. return {
  7. // 效果显示框top的值
  8. contentContainerTop: '0px',
  9. contentContainerIsTop: false,
  10. // 参数显示框top的值
  11. sectionContainerTop: '0px'
  12. }
  13. },
  14. onReady() {
  15. this.updateSectionContainerTop()
  16. },
  17. methods: {
  18. // 处理演示效果框的位置
  19. async _handleContentConatinerPosition() {
  20. // 获取效果演示框的节点信息
  21. const contentContainer = await this._tGetRect('#content_container')
  22. // 获取参数框的节点信息
  23. this._tGetRect('#section_container').then((res) => {
  24. // 判断参数框是否在移动,如果是则更新效果框的位置
  25. // 如果效果框的顶部已经触控到顶部导航栏就停止跟随
  26. if (res.top - contentContainer.bottom != 15) {
  27. const newTop = res.top - (contentContainer.height + uni.upx2px(20))
  28. const minTop = this.vuex_custom_bar_height + 1
  29. if (newTop < minTop) {
  30. this.contentContainerTop = minTop + 'px'
  31. this.contentContainerIsTop = true
  32. } else {
  33. this.contentContainerTop = newTop + 'px'
  34. this.contentContainerIsTop = false
  35. }
  36. }
  37. })
  38. },
  39. // 更新状态切换栏位置信息
  40. updateSectionContainerTop() {
  41. this._tGetRect('#content_container').then((res) => {
  42. this.contentContainerTop = (this.vuex_custom_bar_height + 148) + 'px'
  43. this.sectionContainerTop = (res.height + 20) + 'px'
  44. })
  45. }
  46. },
  47. // 监听页面滚动
  48. onPageScroll() {
  49. this._handleContentConatinerPosition()
  50. }
  51. }