swipescreen.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { rpxToPx } from '../../utils/util'
  2. // components/swipescreen/swipescreen.ts
  3. Component({
  4. /**
  5. * 组件的属性列表
  6. */
  7. properties: {
  8. height: {
  9. type: String,
  10. optionalTypes: [Number],
  11. value: '1466rpx',
  12. observer(val) {
  13. if (typeof val == 'string') {
  14. this.setData({
  15. displayHeight: val,
  16. })
  17. } else {
  18. this.setData({
  19. displayHeight: val + 'px',
  20. })
  21. }
  22. },
  23. },
  24. width: {
  25. type: Number,
  26. optionalTypes: [String],
  27. value: 0,
  28. observer(val) {
  29. if (val.toString().indexOf('rpx') > 0) {
  30. this.setData({
  31. displayWidth: rpxToPx(String(val)),
  32. })
  33. } else {
  34. this.setData({
  35. displayWidth: Number(val),
  36. })
  37. }
  38. },
  39. },
  40. dots: {
  41. type: Boolean,
  42. value: false,
  43. observer(val) {
  44. this.setData({
  45. displayDots: val,
  46. })
  47. },
  48. },
  49. },
  50. options: {
  51. multipleSlots: true,
  52. },
  53. relations: {
  54. './swipescreen-item': {
  55. type: 'child',
  56. },
  57. },
  58. /**
  59. * 组件的初始数据
  60. */
  61. data: {
  62. current: 0,
  63. displayHeight: '1466rpx',
  64. displayWidth: 0,
  65. displayDots: false,
  66. lens: [] as number[],
  67. },
  68. lifetimes: {
  69. ready() {
  70. this.updateChildren()
  71. },
  72. },
  73. /**
  74. * 组件的方法列表
  75. */
  76. methods: {
  77. updateChildren() {
  78. const items = this.getRelationNodes('./swipescreen-item')
  79. const lens = []
  80. let i = 0
  81. while (i < items.length) {
  82. lens.push(i)
  83. i++
  84. }
  85. this.setData({
  86. lens,
  87. })
  88. },
  89. changedIndex(e: { idx: number }) {
  90. if (this.data.current !== e.idx) {
  91. this.setData({
  92. current: e.idx,
  93. })
  94. }
  95. },
  96. },
  97. })