wxc-slide-nav

Weex 导航滑动视窗增大组件

规则

  • 上下滚动列表的时候,可以优雅地动画收起展开导航条,使得能展示更多的列表内容

Demo

wxc-slide-nav 视窗增大 - 图1 wxc-slide-nav 视窗增大 - 图2

使用方法

  1. <template>
  2. <div class="wrapper">
  3. <list
  4. ref="scroller"
  5. @scroll="onScroll"
  6. @touchstart="onTouchStart"
  7. @touchmove="onTouchMove"
  8. @touchend="onTouchEnd"
  9. @touchcancel="onTouchEnd"
  10. @touchstart.native="onTouchStart"
  11. @touchmove.native="onTouchMove"
  12. @touchend.native="onTouchEnd"
  13. @touchcancel.native="onTouchEnd">
  14. <cell>
  15. <div class="padding"></div>
  16. </cell>
  17. <cell class="cell" v-for="(item, index) in items">
  18. <text class="text">{{index + 1}}</text>
  19. </cell>
  20. </list>
  21. <wxc-slide-nav class="nav nav-top" ref="topNav" position="top" @slideIn="slideIn">
  22. <div class="nav-cell"><text>前一天</text></div>
  23. <div class="nav-cell"><text>06-22</text></div>
  24. <div class="nav-cell"><text>后一天</text></div>
  25. </wxc-slide-nav>
  26. <wxc-slide-nav class="nav nav-bottom" ref="bottomNav" position="bottom" @slideOut="slideOut">
  27. <div class="nav-cell"><text class="nav-text">筛选</text></div>
  28. <div class="nav-cell"><text class="nav-text">时间</text></div>
  29. <div class="nav-cell"><text class="nav-text">从低到高</text></div>
  30. </wxc-slide-nav>
  31. </div>
  32. </template>
  33. <script>
  34. import { WxcSlideNav } from 'weex-ui';
  35. export default {
  36. data() {
  37. return { items: new Array(50) }
  38. },
  39. components: { WxcSlideNav },
  40. methods: {
  41. onTouchStart: WxcSlideNav.handleTouchStart,
  42. onTouchEnd: WxcSlideNav.handleTouchEnd,
  43. onTouchMove(e) {
  44. WxcSlideNav.handleTouchMove.call(this, e, this.$refs.bottomNav);
  45. },
  46. onScroll(e) {
  47. WxcSlideNav.handleScroll.call(this, e, this.$refs.scroller, this.$refs.topNav, this.$refs.bottomNav);
  48. },
  49. slideIn() {},
  50. slideOut() {}
  51. }
  52. }
  53. </script>

由于兼容性以及其他原因,目前API使用起来不是特别优雅,需要配合在<list>组件上手动绑定事件

  1. <list
  2. ref="scroller"
  3. @scroll="onScroll"
  4. <!-- 针对Native -->
  5. @touchstart="onTouchStart"
  6. @touchmove="onTouchMove"
  7. @touchend="onTouchEnd"
  8. @touchcancel="onTouchEnd"
  9. <!-- 针对H5 -->
  10. @touchstart.native="onTouchStart"
  11. @touchmove.native="onTouchMove"
  12. @touchend.native="onTouchEnd"
  13. @touchcancel.native="onTouchEnd">
  14. <cell>
  15. <div class="padding"></div>
  16. </cell>
  17. </list>

另外list顶部需要添加padding,因为listcell不支持paddingmargin样式,需要在里面加一个占位的cell充当padding,高度与 topNav 一致

  1. <cell>
  2. <div class="padding"></div>
  3. </cell>
  4. ...
  5. <style>
  6. .padding {
  7. width: 750px;
  8. height: 80px;
  9. }
  10. </style>

然后在事件回调里绑定slideNav的事件方法,其中onTouchMoveonScroll需要传入scrollerslideNav对象

  1. onTouchStart: WxcSlideNav.handleTouchStart,
  2. onTouchEnd: WxcSlideNav.handleTouchEnd,
  3. // 下面方法不要使用箭头函数,会导致this指向错误
  4. onTouchMove(e) {
  5. WxcSlideNav.handleTouchMove.call(this, e, this.$refs.bottomNav);
  6. },
  7. onScroll(e) {
  8. WxcSlideNav.handleScroll.call(this, e, this.$refs.scroller, this.$refs.topNav, this.$refs.bottomNav);
  9. }

可配置参数

Prop Type Required Default Description
position String N 'top' 位置top/bottom
height [String,Number] N - 高度

支持事件

  • slideIn:滑出来(展示)
  • slideInEnd:滑出来结束
  • slideOut:滑出去(隐藏)
  • slideOutEnd:滑出去结束

Please feel free to use and contribute to the development.

原文: https://alibaba.github.io/weex-ui/#/cn/packages/wxc-slide-nav/