index.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // commpents/drawer/index.js
  2. /**
  3. * show:控制显示的变量
  4. * list:数据列表
  5. * label:显示选项的内容,默认 label 属性
  6. * key:选择后获取的值. 为空的话,返回当前选中的选项
  7. * bind:select:选中后的参数
  8. */
  9. Component({
  10. /**
  11. * 组件的属性列表
  12. */
  13. properties: {
  14. // 是否显示
  15. show: {
  16. type: Boolean,
  17. observer: function (val) {
  18. this.setData({ showModalStatus: val })
  19. }
  20. },
  21. // 选项列表
  22. list: { type: Array },
  23. // 显示的属性
  24. label: { type: String, value: 'label' },
  25. // 获取的键名,不写就全返回
  26. key: { type: String }
  27. },
  28. /**
  29. * 组件的初始数据
  30. */
  31. data: {
  32. showModalStatus: false
  33. },
  34. /**
  35. * 组件的方法列表
  36. */
  37. methods: {
  38. selectValue(e) {
  39. const data = e?.target?.dataset?.value
  40. const key = this.properties.key;
  41. if (key) {
  42. const value = data[key];
  43. if (value) {
  44. this.triggerEvent('select', value)
  45. this.setData({ show: false, showModalStatus: false })
  46. return;
  47. } else {
  48. console.log('对象中没有指定的属性')
  49. }
  50. }
  51. this.triggerEvent('select', data)
  52. this.setData({ show: false, showModalStatus: false })
  53. },
  54. powerDrawer: function (e) {
  55. var currentStatu = e.currentTarget.dataset.statu;
  56. this.util(currentStatu)
  57. },
  58. util: function (currentStatu) {
  59. /* 动画部分 */
  60. // 第1步:创建动画实例
  61. var animation = wx.createAnimation({
  62. duration: 200, //动画时长
  63. timingFunction: "linear", //线性
  64. delay: 0 //0则不延迟
  65. });
  66. // 第2步:这个动画实例赋给当前的动画实例
  67. this.animation = animation;
  68. // 第3步:执行第一组动画:Y轴偏移240px后(盒子高度是240px),停
  69. animation.translateY(240).step();
  70. // 第4步:导出动画对象赋给数据对象储存
  71. this.setData({
  72. animationData: animation.export()
  73. })
  74. // 第5步:设置定时器到指定时候后,执行第二组动画
  75. setTimeout(function () {
  76. // 执行第二组动画:Y轴不偏移,停
  77. animation.translateY(0).step()
  78. // 给数据对象储存的第一组动画,更替为执行完第二组动画的动画对象
  79. this.setData({
  80. animationData: animation
  81. })
  82. //关闭抽屉
  83. if (currentStatu == "close") {
  84. this.setData(
  85. {
  86. showModalStatus: false,
  87. show: false
  88. }
  89. );
  90. }
  91. }.bind(this), 200)
  92. // 显示抽屉
  93. if (currentStatu == "open") {
  94. this.setData(
  95. {
  96. showModalStatus: true
  97. }
  98. );
  99. }
  100. }
  101. }
  102. })