index.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // pages/components/water/index.js
  2. Component({
  3. /**
  4. * 组件的属性列表
  5. */
  6. properties: {
  7. columnGap: {
  8. type: String,
  9. value: '20rpx'
  10. }
  11. },
  12. /**
  13. * 组件的初始数据
  14. */
  15. data: {
  16. data: [],
  17. leftData: [],
  18. rightData: []
  19. },
  20. attached() {
  21. this._init()
  22. },
  23. /**
  24. * 组件的方法列表
  25. */
  26. methods: {
  27. _init() {
  28. wx.lin = wx.lin || {};
  29. wx.lin.renderWaterFlow = (data = [], success) => {
  30. if (Object.prototype.toString.call(data) !== '[object Array]') {
  31. console.error("[data]参数类型错误,渲染失败");
  32. return false;
  33. }
  34. this._select(data).then(() => {
  35. success && success()
  36. })
  37. }
  38. },
  39. _select(data) {
  40. const query = wx.createSelectorQuery().in(this)
  41. this.columnNodes = query.selectAll('#left, #right')
  42. return new Promise((resolve, reject) => {
  43. this._render(data, 0, () => {
  44. resolve()
  45. })
  46. })
  47. },
  48. _render(data, i, success) {
  49. if (data.length > i) {
  50. this.columnNodes.boundingClientRect().exec(res => {
  51. const rects = res[0]
  52. const leftHeight = rects[0].height
  53. const rightHeight = rects[1].height
  54. if (leftHeight <= rightHeight) {
  55. this.data.leftData.push(data[i])
  56. } else {
  57. this.data.rightData.push(data[i])
  58. }
  59. this.setData({
  60. leftData: this.data.leftData,
  61. rightData: this.data.rightData
  62. }, _ => {
  63. this._render(data, ++i, success)
  64. })
  65. })
  66. } else {
  67. success && success()
  68. }
  69. }
  70. }
  71. })