index.wxs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. var touchStart = function(e, ins) {
  2. var toucheY = e.changedTouches[0].pageY
  3. var dataset = e.mark
  4. var state = ins.getState()
  5. state.calendarPageY = toucheY
  6. state.calendarHeight = dataset.calendar
  7. state.panelHeight = dataset.panel
  8. state.calendarMax = dataset.max
  9. state.calendarMin = dataset.min
  10. state.calendarMoving = false
  11. if (!state.calendarCurrHeight) state.calendarCurrHeight = dataset.calendar
  12. if (dataset.view == 1) state.calendarCurrHeight = dataset.calendar
  13. if (dataset.view == 2) state.calendarCurrHeight = dataset.min
  14. if (dataset.view == 3) state.calendarCurrHeight = dataset.max
  15. }
  16. var touchMove = function(e, ins) {
  17. var state = ins.getState()
  18. if (state.calendarMoving) return false
  19. state.calendarMoving = true
  20. var diff = Math.floor((e.changedTouches[0].pageY - state.calendarPageY) * 10) / 10
  21. if ((state.calendarCurrHeight + diff) >= state.calendarMin && (state.calendarCurrHeight + diff) <= state.calendarMax) {
  22. //calendar移动距离
  23. ins.selectComponent('#calendar').setStyle({
  24. transition: 'unset',
  25. height: (state.calendarCurrHeight + diff) + 'px'
  26. })
  27. var currPanel = ins.selectComponent('.wd-calendar-month-panel.curr')
  28. if ((state.calendarCurrHeight + diff) >= state.calendarHeight) {
  29. currPanel.setStyle({
  30. transition: 'unset',
  31. height: 'calc(' + (state.calendarCurrHeight + diff) + 'px - 200rpx)'
  32. })
  33. }
  34. if ((state.calendarCurrHeight + diff) < state.calendarHeight) {
  35. var totalTrans = currPanel.getDataset().trans
  36. var totalTransDis = state.calendarHeight - state.calendarMin
  37. var panleTrans = Math.floor(10 * totalTrans * Math.abs(state.calendarCurrHeight + diff - state.calendarHeight) / totalTransDis) / 10
  38. currPanel.setStyle({
  39. transition: 'unset',
  40. transform: 'translateY(' + (-panleTrans) + 'px)'
  41. })
  42. }
  43. if (((state.calendarCurrHeight + diff) < (state.calendarMax - 40))) {
  44. var schedules = ins.selectAllComponents('.wd-calendar-schedules')
  45. for (var i = 0; i < schedules.length; i++) {
  46. schedules[i].removeClass('show')
  47. }
  48. }
  49. //底部控制条样式
  50. var director = diff > 0 ? 1 : -1
  51. var deg = 0
  52. if (Math.abs(diff) < 120) {
  53. deg = director * Math.floor(Math.abs(diff) / 120 * 20)
  54. } else {
  55. deg = director * 20
  56. }
  57. ins.selectComponent('#control_1').setStyle({
  58. transition: 'unset',
  59. transform: 'rotate(' + deg + 'deg)'
  60. })
  61. ins.selectComponent('#control_2').setStyle({
  62. transition: 'unset',
  63. transform: 'rotate(' + (-deg) + 'deg)'
  64. })
  65. }
  66. state.calendarMoving = false
  67. }
  68. var touchEnd = function(e, ins) {
  69. var state = ins.getState()
  70. var _pageY = e.changedTouches[0].pageY
  71. var diff = Math.floor((_pageY - state.calendarPageY))
  72. var position = state.calendarCurrHeight + diff
  73. var viewSate = e.mark.view
  74. var calendarCriticalMin = state.calendarHeight - 120
  75. var calendarCriticalMax = state.calendarHeight + Math.floor((state.calendarMax - state.calendarHeight) * 0.3)
  76. if (position > calendarCriticalMax) {
  77. viewSate = 3
  78. ins.selectComponent('#calendar').setStyle({
  79. transition: 'all .3s ease 0s',
  80. height: state.calendarMax + 'px'
  81. })
  82. ins.selectComponent('.wd-calendar-month-panel.curr').setStyle({
  83. transition: 'all .3s ease 0s',
  84. height: 'calc(' + state.calendarMax + 'px - 200rpx)',
  85. transform: 'translateY(0)'
  86. })
  87. var others = ins.selectAllComponents('.wd-calendar-month-panel.other')
  88. for (var i = 0; i < others.length; i++) {
  89. others[i].setStyle({
  90. transition: 'unset',
  91. height: 'calc(' + state.calendarMax + 'px - 200rpx)'
  92. })
  93. }
  94. var schedules = ins.selectAllComponents('.wd-calendar-schedules')
  95. for (var i = 0; i < schedules.length; i++) {
  96. schedules[i].addClass('show')
  97. }
  98. state.schedule_show = true
  99. } else if (position <= calendarCriticalMax && position > calendarCriticalMin) {
  100. viewSate = 1
  101. ins.selectComponent('#calendar').setStyle({
  102. transition: 'all .3s cubic-bezier(0.5, 0, 0.27, 1.5) 0s',
  103. height: state.calendarHeight + 'px'
  104. })
  105. ins.selectComponent('.wd-calendar-month-panel.curr').setStyle({
  106. transition: 'all .3s cubic-bezier(0.5, 0, 0.27, 1.5) 0s',
  107. height: state.panelHeight + 'px',
  108. transform: 'translateY(0)'
  109. })
  110. var others = ins.selectAllComponents('.wd-calendar-month-panel.other')
  111. for (var i = 0; i < others.length; i++) {
  112. others[i].setStyle({
  113. transition: 'unset',
  114. height: state.panelHeight + 'px',
  115. transform: 'translateY(0)'
  116. })
  117. }
  118. } else {
  119. viewSate = 2
  120. ins.selectComponent('#calendar').setStyle({
  121. transition: 'all .3s cubic-bezier(0.5, 0, 0.27, 1.5) 0s',
  122. height: state.calendarMin + 'px'
  123. })
  124. var curr = ins.selectComponent('.wd-calendar-month-panel.curr')
  125. curr.setStyle({
  126. transition: 'all .3s cubic-bezier(0.5, 0, 0.27, 1.5) 0s',
  127. height: state.panelHeight + 'px',
  128. transform: 'translateY(' + (-curr.getDataset().trans) + 'px)'
  129. })
  130. var others = ins.selectAllComponents('.wd-calendar-month-panel.other')
  131. for (var i = 0; i < others.length; i++) {
  132. var trans = others[i].getDataset().trans
  133. others[i].setStyle({
  134. transition: 'unset',
  135. height: state.panelHeight + 'px',
  136. transform: 'translateY(' + (-trans) + 'px)'
  137. })
  138. }
  139. }
  140. ins.selectComponent('#control_1').setStyle({
  141. transition: 'all .3s cubic-bezier(0.6, 0, 0.27, 1.5) .2s',
  142. transform: 'rotate(0deg)'
  143. })
  144. ins.selectComponent('#control_2').setStyle({
  145. transition: 'all .3s cubic-bezier(0.6, 0, 0.27, 1.5) .2s',
  146. transform: 'rotate(0deg)'
  147. })
  148. ins.callMethod('toggleView', { state: viewSate })
  149. }
  150. var handleViewToggle = function(viewState, dataset, ins) {
  151. if (viewState == 2) {
  152. ins.selectComponent('#calendar').setStyle({
  153. transition: 'all .28s ease 0s',
  154. height: dataset.min + 'px'
  155. })
  156. var curr = ins.selectComponent('.wd-calendar-month-panel.curr')
  157. curr.setStyle({
  158. transition: 'all .28s ease 0s',
  159. height: dataset.panel + 'px',
  160. transform: 'translateY(' + (-curr.getDataset().trans) + 'px)'
  161. })
  162. var others = ins.selectAllComponents('.wd-calendar-month-panel.other')
  163. for (var i = 0; i < others.length; i++) {
  164. var trans = others[i].getDataset().trans
  165. others[i].setStyle({
  166. transition: 'unset',
  167. height: dataset.panel + 'px',
  168. transform: 'translateY(' + (-trans) + 'px)'
  169. })
  170. }
  171. } else {
  172. ins.selectComponent('#calendar').setStyle({
  173. transition: 'all .28s ease 0s',
  174. height: dataset.calendar + 'px'
  175. })
  176. ins.selectComponent('.wd-calendar-month-panel.curr').setStyle({
  177. transition: 'all .28s ease 0s',
  178. height: dataset.panel + 'px',
  179. transform: 'translateY(0)'
  180. })
  181. var others = ins.selectAllComponents('.wd-calendar-month-panel.other')
  182. for (var i = 0; i < others.length; i++) {
  183. others[i].setStyle({
  184. transition: 'unset',
  185. height: dataset.panel + 'px',
  186. transform: 'translateY(0)'
  187. })
  188. }
  189. }
  190. var schedules = ins.selectAllComponents('.wd-calendar-schedules')
  191. for (var i = 0; i < schedules.length; i++) {
  192. schedules[i].removeClass('show')
  193. }
  194. }
  195. var toggleView = function(e, ins) {
  196. var dataset = e.mark
  197. var viewSate = dataset.view
  198. if (dataset.view == 2) {
  199. viewSate = 1
  200. handleViewToggle(1, dataset, ins)
  201. } else {
  202. viewSate = 2
  203. handleViewToggle(2, dataset, ins)
  204. }
  205. ins.callMethod('toggleView', { state: viewSate })
  206. }
  207. var handleViewChange = function(view, _, ins) {
  208. if (view) {
  209. var dataset = ins.selectComponent('#calendar').getDataset()
  210. var viewSate = view == 'week' ? 2 : 1
  211. handleViewToggle(viewSate, dataset, ins)
  212. ins.callMethod('toggleView', { state: viewSate })
  213. }
  214. }
  215. var handleMonthChange = function(monthchange, _, ins) {
  216. if (monthchange) {
  217. var dataset = ins.selectComponent('#calendar').getDataset()
  218. var curr = ins.selectComponent('.wd-calendar-month-panel.curr')
  219. curr.setStyle({
  220. transition: 'unset',
  221. height: dataset.panel + 'px',
  222. transform: 'translateY(' + (-curr.getDataset().trans) + 'px)'
  223. })
  224. }
  225. }
  226. var handleInitTrans = function(needInitTrans, _, ins) {
  227. if (needInitTrans) {
  228. var dataset = ins.selectComponent('#calendar').getDataset()
  229. var curr = ins.selectComponent('.wd-calendar-month-panel.curr')
  230. curr.setStyle({
  231. transition: 'unset',
  232. height: dataset.panel + 'px',
  233. transform: 'translateY(' + (-curr.getDataset().trans) + 'px)'
  234. })
  235. var others = ins.selectAllComponents('.wd-calendar-month-panel.other')
  236. for (var i = 0; i < others.length; i++) {
  237. var trans = others[i].getDataset().trans
  238. others[i].setStyle({
  239. transition: 'unset',
  240. height: dataset.panel + 'px',
  241. transform: 'translateY(' + (-trans) + 'px)'
  242. })
  243. }
  244. }
  245. }
  246. var handleWeekSwiperChange = function(weektabchange, _, ins) {
  247. if (weektabchange >= 0) {
  248. var dataset = ins.selectComponent('#calendar').getDataset()
  249. var others = ins.selectAllComponents('.wd-calendar-month-panel.other')
  250. for (var i = 0; i < others.length; i++) {
  251. var trans = others[i].getDataset().trans
  252. others[i].setStyle({
  253. transition: 'unset',
  254. height: dataset.panel + 'px',
  255. transform: 'translateY(' + (-trans) + 'px)'
  256. })
  257. }
  258. }
  259. }
  260. var handleYearPanelShow = function(e, ins) {
  261. var dataset = e.mark
  262. var viewSate = dataset.view
  263. if (viewSate == 1) {
  264. ins.callMethod('justYearPanelShow')
  265. } else {
  266. ins.selectComponent('#calendar').setStyle({
  267. transition: 'all .28s ease 0s',
  268. height: dataset.calendar + 'px'
  269. })
  270. ins.selectComponent('.wd-calendar-month-panel.curr').setStyle({
  271. transition: 'all .28s ease 0s',
  272. height: dataset.panel + 'px',
  273. transform: 'translateY(0)'
  274. })
  275. var others = ins.selectAllComponents('.wd-calendar-month-panel.other')
  276. for (var i = 0; i < others.length; i++) {
  277. others[i].setStyle({
  278. transition: 'unset',
  279. height: dataset.panel + 'px',
  280. transform: 'translateY(0)'
  281. })
  282. }
  283. ins.callMethod('handleYearPanelShow')
  284. ins.callMethod('toggleView', { state: 1 })
  285. }
  286. }
  287. module.exports = {
  288. touchStart: touchStart,
  289. touchMove: touchMove,
  290. touchEnd: touchEnd,
  291. toggleView: toggleView,
  292. handleMonthChange: handleMonthChange,
  293. handleWeekSwiperChange: handleWeekSwiperChange,
  294. handleYearPanelShow: handleYearPanelShow,
  295. handleInitTrans: handleInitTrans,
  296. handleViewChange: handleViewChange
  297. }