uview-ui-wjf 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -0
  3. package/changelog.md +388 -0
  4. package/components/u--form/u--form.vue +92 -0
  5. package/components/u--image/u--image.vue +73 -0
  6. package/components/u--input/u--input.vue +115 -0
  7. package/components/u--text/u--text.vue +72 -0
  8. package/components/u--textarea/u--textarea.vue +85 -0
  9. package/components/u-action-sheet/props.js +54 -0
  10. package/components/u-action-sheet/u-action-sheet.vue +278 -0
  11. package/components/u-album/props.js +59 -0
  12. package/components/u-album/u-album.vue +259 -0
  13. package/components/u-alert/props.js +44 -0
  14. package/components/u-alert/u-alert.vue +243 -0
  15. package/components/u-avatar/props.js +78 -0
  16. package/components/u-avatar/u-avatar.vue +173 -0
  17. package/components/u-avatar-group/props.js +52 -0
  18. package/components/u-avatar-group/u-avatar-group.vue +103 -0
  19. package/components/u-back-top/props.js +54 -0
  20. package/components/u-back-top/u-back-top.vue +129 -0
  21. package/components/u-badge/props.js +72 -0
  22. package/components/u-badge/u-badge.vue +171 -0
  23. package/components/u-button/nvue.scss +46 -0
  24. package/components/u-button/props.js +161 -0
  25. package/components/u-button/u-button.vue +495 -0
  26. package/components/u-button/vue.scss +80 -0
  27. package/components/u-calendar/header.vue +99 -0
  28. package/components/u-calendar/month.vue +579 -0
  29. package/components/u-calendar/props.js +144 -0
  30. package/components/u-calendar/u-calendar.vue +384 -0
  31. package/components/u-calendar/util.js +85 -0
  32. package/components/u-car-keyboard/props.js +14 -0
  33. package/components/u-car-keyboard/u-car-keyboard.vue +311 -0
  34. package/components/u-cell/props.js +110 -0
  35. package/components/u-cell/u-cell.vue +229 -0
  36. package/components/u-cell-group/props.js +14 -0
  37. package/components/u-cell-group/u-cell-group.vue +61 -0
  38. package/components/u-checkbox/props.js +69 -0
  39. package/components/u-checkbox/u-checkbox.vue +344 -0
  40. package/components/u-checkbox-group/props.js +82 -0
  41. package/components/u-checkbox-group/u-checkbox-group.vue +103 -0
  42. package/components/u-circle-progress/props.js +8 -0
  43. package/components/u-circle-progress/u-circle-progress.vue +198 -0
  44. package/components/u-code/props.js +34 -0
  45. package/components/u-code/u-code.vue +129 -0
  46. package/components/u-code-input/props.js +79 -0
  47. package/components/u-code-input/u-code-input.vue +252 -0
  48. package/components/u-col/props.js +29 -0
  49. package/components/u-col/u-col.vue +162 -0
  50. package/components/u-collapse/props.js +19 -0
  51. package/components/u-collapse/u-collapse.vue +90 -0
  52. package/components/u-collapse-item/props.js +59 -0
  53. package/components/u-collapse-item/u-collapse-item.vue +225 -0
  54. package/components/u-column-notice/props.js +55 -0
  55. package/components/u-column-notice/u-column-notice.vue +160 -0
  56. package/components/u-count-down/props.js +24 -0
  57. package/components/u-count-down/u-count-down.vue +163 -0
  58. package/components/u-count-down/utils.js +62 -0
  59. package/components/u-count-to/props.js +59 -0
  60. package/components/u-count-to/u-count-to.vue +184 -0
  61. package/components/u-datetime-picker/props.js +120 -0
  62. package/components/u-datetime-picker/u-datetime-picker.vue +361 -0
  63. package/components/u-divider/props.js +44 -0
  64. package/components/u-divider/u-divider.vue +116 -0
  65. package/components/u-dropdown/props.js +65 -0
  66. package/components/u-dropdown/u-dropdown.vue +127 -0
  67. package/components/u-dropdown-item/props.js +36 -0
  68. package/components/u-dropdown-item/u-dropdown-item.vue +127 -0
  69. package/components/u-empty/props.js +59 -0
  70. package/components/u-empty/u-empty.vue +128 -0
  71. package/components/u-form/props.js +45 -0
  72. package/components/u-form/u-form.vue +214 -0
  73. package/components/u-form-item/props.js +48 -0
  74. package/components/u-form-item/u-form-item.vue +235 -0
  75. package/components/u-gap/props.js +24 -0
  76. package/components/u-gap/u-gap.vue +38 -0
  77. package/components/u-grid/props.js +19 -0
  78. package/components/u-grid/u-grid.vue +97 -0
  79. package/components/u-grid-item/props.js +14 -0
  80. package/components/u-grid-item/u-grid-item.vue +209 -0
  81. package/components/u-icon/icons.js +214 -0
  82. package/components/u-icon/props.js +89 -0
  83. package/components/u-icon/u-icon.vue +237 -0
  84. package/components/u-image/props.js +84 -0
  85. package/components/u-image/u-image.vue +232 -0
  86. package/components/u-index-anchor/props.js +29 -0
  87. package/components/u-index-anchor/u-index-anchor.vue +91 -0
  88. package/components/u-index-item/props.js +5 -0
  89. package/components/u-index-item/u-index-item.vue +87 -0
  90. package/components/u-index-list/props.js +29 -0
  91. package/components/u-index-list/u-index-list.vue +440 -0
  92. package/components/u-input/props.js +187 -0
  93. package/components/u-input/u-input.vue +369 -0
  94. package/components/u-keyboard/props.js +84 -0
  95. package/components/u-keyboard/u-keyboard.vue +164 -0
  96. package/components/u-line/props.js +33 -0
  97. package/components/u-line/u-line.vue +62 -0
  98. package/components/u-line-progress/props.js +28 -0
  99. package/components/u-line-progress/u-line-progress.vue +144 -0
  100. package/components/u-link/props.js +39 -0
  101. package/components/u-link/u-link.vue +83 -0
  102. package/components/u-list/props.js +76 -0
  103. package/components/u-list/u-list.vue +157 -0
  104. package/components/u-list-item/props.js +9 -0
  105. package/components/u-list-item/u-list-item.vue +116 -0
  106. package/components/u-loading-icon/props.js +59 -0
  107. package/components/u-loading-icon/u-loading-icon.vue +343 -0
  108. package/components/u-loading-page/props.js +49 -0
  109. package/components/u-loading-page/u-loading-page.vue +115 -0
  110. package/components/u-loadmore/props.js +94 -0
  111. package/components/u-loadmore/u-loadmore.vue +150 -0
  112. package/components/u-modal/props.js +89 -0
  113. package/components/u-modal/u-modal.vue +228 -0
  114. package/components/u-navbar/props.js +84 -0
  115. package/components/u-navbar/u-navbar.vue +186 -0
  116. package/components/u-no-network/props.js +19 -0
  117. package/components/u-no-network/u-no-network.vue +220 -0
  118. package/components/u-notice-bar/props.js +70 -0
  119. package/components/u-notice-bar/u-notice-bar.vue +101 -0
  120. package/components/u-notify/props.js +49 -0
  121. package/components/u-notify/u-notify.vue +211 -0
  122. package/components/u-number-box/props.js +109 -0
  123. package/components/u-number-box/u-number-box.vue +416 -0
  124. package/components/u-number-keyboard/props.js +19 -0
  125. package/components/u-number-keyboard/u-number-keyboard.vue +196 -0
  126. package/components/u-overlay/props.js +24 -0
  127. package/components/u-overlay/u-overlay.vue +68 -0
  128. package/components/u-parse/node/node.vue +499 -0
  129. package/components/u-parse/parser.js +1075 -0
  130. package/components/u-parse/props.js +45 -0
  131. package/components/u-parse/u-parse.vue +366 -0
  132. package/components/u-picker/props.js +79 -0
  133. package/components/u-picker/u-picker.vue +286 -0
  134. package/components/u-picker-column/props.js +5 -0
  135. package/components/u-picker-column/u-picker-column.vue +27 -0
  136. package/components/u-popup/props.js +79 -0
  137. package/components/u-popup/u-popup.vue +304 -0
  138. package/components/u-radio/props.js +64 -0
  139. package/components/u-radio/u-radio.vue +339 -0
  140. package/components/u-radio-group/props.js +85 -0
  141. package/components/u-radio-group/u-radio-group.vue +108 -0
  142. package/components/u-rate/props.js +69 -0
  143. package/components/u-rate/u-rate.vue +306 -0
  144. package/components/u-read-more/props.js +61 -0
  145. package/components/u-read-more/u-read-more.vue +157 -0
  146. package/components/u-row/props.js +19 -0
  147. package/components/u-row/u-row.vue +93 -0
  148. package/components/u-row-notice/props.js +39 -0
  149. package/components/u-row-notice/u-row-notice.vue +330 -0
  150. package/components/u-safe-bottom/props.js +5 -0
  151. package/components/u-safe-bottom/u-safe-bottom.vue +56 -0
  152. package/components/u-scroll-list/nvue.js +28 -0
  153. package/components/u-scroll-list/other.js +0 -0
  154. package/components/u-scroll-list/props.js +34 -0
  155. package/components/u-scroll-list/scrollWxs.wxs +50 -0
  156. package/components/u-scroll-list/u-scroll-list.vue +224 -0
  157. package/components/u-search/props.js +118 -0
  158. package/components/u-search/u-search.vue +303 -0
  159. package/components/u-skeleton/props.js +59 -0
  160. package/components/u-skeleton/u-skeleton.vue +244 -0
  161. package/components/u-slider/mpother.js +113 -0
  162. package/components/u-slider/mpwxs.js +42 -0
  163. package/components/u-slider/mpwxs.wxs +121 -0
  164. package/components/u-slider/nvue - /345/211/257/346/234/254.js" +180 -0
  165. package/components/u-slider/nvue.js +193 -0
  166. package/components/u-slider/props.js +54 -0
  167. package/components/u-slider/u-slider.vue +55 -0
  168. package/components/u-status-bar/props.js +8 -0
  169. package/components/u-status-bar/u-status-bar.vue +46 -0
  170. package/components/u-steps/props.js +39 -0
  171. package/components/u-steps/u-steps.vue +80 -0
  172. package/components/u-steps-item/props.js +24 -0
  173. package/components/u-steps-item/u-steps-item.vue +316 -0
  174. package/components/u-sticky/props.js +40 -0
  175. package/components/u-sticky/u-sticky.vue +212 -0
  176. package/components/u-subsection/props.js +49 -0
  177. package/components/u-subsection/u-subsection.vue +299 -0
  178. package/components/u-swipe-action/props.js +9 -0
  179. package/components/u-swipe-action/u-swipe-action.vue +67 -0
  180. package/components/u-swipe-action-item/index - backup.wxs +256 -0
  181. package/components/u-swipe-action-item/index.wxs +225 -0
  182. package/components/u-swipe-action-item/nvue - backup.js +270 -0
  183. package/components/u-swipe-action-item/nvue.js +174 -0
  184. package/components/u-swipe-action-item/props.js +41 -0
  185. package/components/u-swipe-action-item/u-swipe-action-item.vue +190 -0
  186. package/components/u-swipe-action-item/wxs.js +15 -0
  187. package/components/u-swiper/props.js +125 -0
  188. package/components/u-swiper/u-swiper.vue +255 -0
  189. package/components/u-swiper-indicator/props.js +29 -0
  190. package/components/u-swiper-indicator/u-swiper-indicator.vue +110 -0
  191. package/components/u-switch/props.js +54 -0
  192. package/components/u-switch/u-switch.vue +177 -0
  193. package/components/u-tabbar/props.js +44 -0
  194. package/components/u-tabbar/u-tabbar.vue +141 -0
  195. package/components/u-tabbar-item/props.js +35 -0
  196. package/components/u-tabbar-item/u-tabbar-item.vue +142 -0
  197. package/components/u-table/props.js +5 -0
  198. package/components/u-table/u-table.vue +29 -0
  199. package/components/u-tabs/props.js +64 -0
  200. package/components/u-tabs/u-tabs.vue +363 -0
  201. package/components/u-tabs-item/props.js +5 -0
  202. package/components/u-tabs-item/u-tabs-item.vue +29 -0
  203. package/components/u-tag/props.js +84 -0
  204. package/components/u-tag/u-tag.vue +358 -0
  205. package/components/u-td/props.js +5 -0
  206. package/components/u-td/u-td.vue +31 -0
  207. package/components/u-text/props.js +110 -0
  208. package/components/u-text/u-text.vue +223 -0
  209. package/components/u-text/value.js +85 -0
  210. package/components/u-textarea/props.js +119 -0
  211. package/components/u-textarea/u-textarea.vue +239 -0
  212. package/components/u-toast/u-toast.vue +291 -0
  213. package/components/u-toolbar/props.js +34 -0
  214. package/components/u-toolbar/u-toolbar.vue +102 -0
  215. package/components/u-tooltip/clipboard.min.js +58 -0
  216. package/components/u-tooltip/props.js +59 -0
  217. package/components/u-tooltip/u-tooltip.vue +366 -0
  218. package/components/u-tr/props.js +5 -0
  219. package/components/u-tr/u-tr.vue +31 -0
  220. package/components/u-transition/nvue.ani-map.js +68 -0
  221. package/components/u-transition/props.js +24 -0
  222. package/components/u-transition/transition.js +157 -0
  223. package/components/u-transition/u-transition.vue +92 -0
  224. package/components/u-transition/vue.ani-style.scss +113 -0
  225. package/components/u-upload/mixin.js +21 -0
  226. package/components/u-upload/props.js +124 -0
  227. package/components/u-upload/u-upload.vue +566 -0
  228. package/components/u-upload/utils.js +151 -0
  229. package/components/uview-ui/uview-ui.vue +15 -0
  230. package/index.js +79 -0
  231. package/index.scss +23 -0
  232. package/libs/config/color.js +17 -0
  233. package/libs/config/config.js +34 -0
  234. package/libs/config/props/actionSheet.js +25 -0
  235. package/libs/config/props/album.js +25 -0
  236. package/libs/config/props/alert.js +22 -0
  237. package/libs/config/props/avatar.js +28 -0
  238. package/libs/config/props/avatarGroup.js +23 -0
  239. package/libs/config/props/backtop.js +27 -0
  240. package/libs/config/props/badge.js +27 -0
  241. package/libs/config/props/button.js +42 -0
  242. package/libs/config/props/calendar.js +42 -0
  243. package/libs/config/props/carKeyboard.js +15 -0
  244. package/libs/config/props/cell.js +35 -0
  245. package/libs/config/props/cellGroup.js +17 -0
  246. package/libs/config/props/checkbox.js +27 -0
  247. package/libs/config/props/checkboxGroup.js +29 -0
  248. package/libs/config/props/circleProgress.js +15 -0
  249. package/libs/config/props/code.js +21 -0
  250. package/libs/config/props/codeInput.js +29 -0
  251. package/libs/config/props/col.js +19 -0
  252. package/libs/config/props/collapse.js +17 -0
  253. package/libs/config/props/collapseItem.js +25 -0
  254. package/libs/config/props/columnNotice.js +24 -0
  255. package/libs/config/props/countDown.js +18 -0
  256. package/libs/config/props/countTo.js +25 -0
  257. package/libs/config/props/datetimePicker.js +37 -0
  258. package/libs/config/props/divider.js +23 -0
  259. package/libs/config/props/empty.js +26 -0
  260. package/libs/config/props/form.js +22 -0
  261. package/libs/config/props/formItem.js +23 -0
  262. package/libs/config/props/gap.js +19 -0
  263. package/libs/config/props/grid.js +17 -0
  264. package/libs/config/props/gridItem.js +16 -0
  265. package/libs/config/props/icon.js +36 -0
  266. package/libs/config/props/image.js +30 -0
  267. package/libs/config/props/indexAnchor.js +19 -0
  268. package/libs/config/props/indexList.js +19 -0
  269. package/libs/config/props/input.js +48 -0
  270. package/libs/config/props/keyboard.js +30 -0
  271. package/libs/config/props/line.js +20 -0
  272. package/libs/config/props/lineProgress.js +19 -0
  273. package/libs/config/props/link.js +26 -0
  274. package/libs/config/props/list.js +28 -0
  275. package/libs/config/props/listItem.js +15 -0
  276. package/libs/config/props/loadingIcon.js +30 -0
  277. package/libs/config/props/loadingPage.js +23 -0
  278. package/libs/config/props/loadmore.js +32 -0
  279. package/libs/config/props/modal.js +31 -0
  280. package/libs/config/props/navbar.js +32 -0
  281. package/libs/config/props/noNetwork.js +18 -0
  282. package/libs/config/props/noticeBar.js +27 -0
  283. package/libs/config/props/notify.js +22 -0
  284. package/libs/config/props/numberBox.js +35 -0
  285. package/libs/config/props/numberKeyboard.js +17 -0
  286. package/libs/config/props/overlay.js +18 -0
  287. package/libs/config/props/parse.js +22 -0
  288. package/libs/config/props/picker.js +29 -0
  289. package/libs/config/props/popup.js +29 -0
  290. package/libs/config/props/radio.js +27 -0
  291. package/libs/config/props/radioGroup.js +30 -0
  292. package/libs/config/props/rate.js +26 -0
  293. package/libs/config/props/readMore.js +22 -0
  294. package/libs/config/props/row.js +17 -0
  295. package/libs/config/props/rowNotice.js +21 -0
  296. package/libs/config/props/scrollList.js +20 -0
  297. package/libs/config/props/search.js +37 -0
  298. package/libs/config/props/section.js +24 -0
  299. package/libs/config/props/skeleton.js +25 -0
  300. package/libs/config/props/slider.js +25 -0
  301. package/libs/config/props/statusBar.js +15 -0
  302. package/libs/config/props/steps.js +21 -0
  303. package/libs/config/props/stepsItem.js +18 -0
  304. package/libs/config/props/sticky.js +20 -0
  305. package/libs/config/props/subsection.js +23 -0
  306. package/libs/config/props/swipeAction.js +15 -0
  307. package/libs/config/props/swipeActionItem.js +21 -0
  308. package/libs/config/props/swiper.js +39 -0
  309. package/libs/config/props/swipterIndicator.js +19 -0
  310. package/libs/config/props/switch.js +24 -0
  311. package/libs/config/props/tabbar.js +22 -0
  312. package/libs/config/props/tabbarItem.js +20 -0
  313. package/libs/config/props/tabs.js +32 -0
  314. package/libs/config/props/tag.js +29 -0
  315. package/libs/config/props/text.js +38 -0
  316. package/libs/config/props/textarea.js +36 -0
  317. package/libs/config/props/toast.js +30 -0
  318. package/libs/config/props/toolbar.js +21 -0
  319. package/libs/config/props/tooltip.js +25 -0
  320. package/libs/config/props/transition.js +18 -0
  321. package/libs/config/props/upload.js +36 -0
  322. package/libs/config/props.js +190 -0
  323. package/libs/config/zIndex.js +20 -0
  324. package/libs/css/color.scss +155 -0
  325. package/libs/css/common.scss +97 -0
  326. package/libs/css/components.scss +15 -0
  327. package/libs/css/flex.scss +257 -0
  328. package/libs/css/h5.scss +0 -0
  329. package/libs/css/mixin.scss +8 -0
  330. package/libs/css/mp.scss +0 -0
  331. package/libs/css/nvue.scss +0 -0
  332. package/libs/css/vue.scss +27 -0
  333. package/libs/function/colorGradient.js +134 -0
  334. package/libs/function/debounce.js +29 -0
  335. package/libs/function/digit.js +167 -0
  336. package/libs/function/index.js +731 -0
  337. package/libs/function/platform.js +75 -0
  338. package/libs/function/test.js +288 -0
  339. package/libs/function/throttle.js +30 -0
  340. package/libs/luch-request/adapters/index.js +97 -0
  341. package/libs/luch-request/core/InterceptorManager.js +50 -0
  342. package/libs/luch-request/core/Request.js +198 -0
  343. package/libs/luch-request/core/buildFullPath.js +20 -0
  344. package/libs/luch-request/core/defaults.js +29 -0
  345. package/libs/luch-request/core/dispatchRequest.js +3 -0
  346. package/libs/luch-request/core/mergeConfig.js +103 -0
  347. package/libs/luch-request/core/settle.js +16 -0
  348. package/libs/luch-request/helpers/buildURL.js +69 -0
  349. package/libs/luch-request/helpers/combineURLs.js +14 -0
  350. package/libs/luch-request/helpers/isAbsoluteURL.js +14 -0
  351. package/libs/luch-request/index.d.ts +116 -0
  352. package/libs/luch-request/index.js +3 -0
  353. package/libs/luch-request/utils/clone.js +264 -0
  354. package/libs/luch-request/utils.js +131 -0
  355. package/libs/mixin/button.js +13 -0
  356. package/libs/mixin/mixin.js +160 -0
  357. package/libs/mixin/mpMixin.js +8 -0
  358. package/libs/mixin/mpShare.js +13 -0
  359. package/libs/mixin/openType.js +25 -0
  360. package/libs/mixin/style.js +228 -0
  361. package/libs/mixin/touch.js +59 -0
  362. package/libs/util/async-validator.js +1343 -0
  363. package/libs/util/calendar.js +546 -0
  364. package/libs/util/dayjs.js +308 -0
  365. package/libs/util/emitter.js +51 -0
  366. package/libs/util/route.js +124 -0
  367. package/package.json +83 -0
  368. package/theme.scss +44 -0
@@ -0,0 +1,330 @@
1
+ <template>
2
+ <view
3
+ class="u-notice"
4
+ @tap="clickHandler"
5
+ >
6
+ <slot name="icon">
7
+ <view
8
+ class="u-notice__left-icon"
9
+ v-if="icon"
10
+ >
11
+ <u-icon
12
+ :name="icon"
13
+ :color="color"
14
+ size="19"
15
+ ></u-icon>
16
+ </view>
17
+ </slot>
18
+ <view
19
+ class="u-notice__content"
20
+ ref="u-notice__content"
21
+ >
22
+ <view
23
+ ref="u-notice__content__text"
24
+ class="u-notice__content__text"
25
+ :style="[animationStyle]"
26
+ >
27
+ <text
28
+ v-for="(item, index) in innerText"
29
+ :key="index"
30
+ :style="[textStyle]"
31
+ >{{item}}</text>
32
+ </view>
33
+ </view>
34
+ <view
35
+ class="u-notice__right-icon"
36
+ v-if="['link', 'closable'].includes(mode)"
37
+ >
38
+ <u-icon
39
+ v-if="mode === 'link'"
40
+ name="arrow-right"
41
+ :size="17"
42
+ :color="color"
43
+ ></u-icon>
44
+ <u-icon
45
+ v-if="mode === 'closable'"
46
+ @click="close"
47
+ name="close"
48
+ :size="16"
49
+ :color="color"
50
+ ></u-icon>
51
+ </view>
52
+ </view>
53
+ </template>
54
+ <script>
55
+ import props from './props.js';
56
+ // #ifdef APP-NVUE
57
+ const animation = uni.requireNativePlugin('animation')
58
+ const dom = uni.requireNativePlugin('dom')
59
+ // #endif
60
+ /**
61
+ * RowNotice 滚动通知中的水平滚动模式
62
+ * @description 水平滚动
63
+ * @tutorial https://www.uviewui.com/components/noticeBar.html
64
+ * @property {String | Number} text 显示的内容,字符串
65
+ * @property {String} icon 是否显示左侧的音量图标 (默认 'volume' )
66
+ * @property {String} mode 通告模式,link-显示右箭头,closable-显示右侧关闭图标
67
+ * @property {String} color 文字颜色,各图标也会使用文字颜色 (默认 '#f9ae3d' )
68
+ * @property {String} bgColor 背景颜色 (默认 ''#fdf6ec' )
69
+ * @property {String | Number} fontSize 字体大小,单位px (默认 14 )
70
+ * @property {String | Number} speed 水平滚动时的滚动速度,即每秒滚动多少px(rpx),这有利于控制文字无论多少时,都能有一个恒定的速度 (默认 80 )
71
+ *
72
+ * @event {Function} click 点击通告文字触发
73
+ * @event {Function} close 点击右侧关闭图标触发
74
+ * @example
75
+ */
76
+ export default {
77
+ name: 'u-row-notice',
78
+ mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
79
+ data() {
80
+ return {
81
+ animationDuration: '0', // 动画执行时间
82
+ animationPlayState: 'paused', // 动画的开始和结束执行
83
+ // nvue下,内容发生变化,导致滚动宽度也变化,需要标志为是否需要重新计算宽度
84
+ // 不能在内容变化时直接重新计算,因为nvue的animation模块上一次的滚动不是刚好结束,会有影响
85
+ nvueInit: true,
86
+ show: true
87
+ };
88
+ },
89
+ watch: {
90
+ text: {
91
+ immediate: true,
92
+ handler(newValue, oldValue) {
93
+ // #ifdef APP-NVUE
94
+ this.nvueInit = true
95
+ // #endif
96
+ // #ifndef APP-NVUE
97
+ this.vue()
98
+ // #endif
99
+
100
+ if(!uni.$u.test.string(newValue)) {
101
+ uni.$u.error('noticebar组件direction为row时,要求text参数为字符串形式')
102
+ }
103
+ }
104
+ },
105
+ fontSize() {
106
+ // #ifdef APP-NVUE
107
+ this.nvueInit = true
108
+ // #endif
109
+ // #ifndef APP-NVUE
110
+ this.vue()
111
+ // #endif
112
+ },
113
+ speed() {
114
+ // #ifdef APP-NVUE
115
+ this.nvueInit = true
116
+ // #endif
117
+ // #ifndef APP-NVUE
118
+ this.vue()
119
+ // #endif
120
+ }
121
+ },
122
+ computed: {
123
+ // 文字内容的样式
124
+ textStyle() {
125
+ let style = {}
126
+ style.color = this.color
127
+ style.fontSize = uni.$u.addUnit(this.fontSize)
128
+ return style
129
+ },
130
+ animationStyle() {
131
+ let style = {}
132
+ style.animationDuration = this.animationDuration
133
+ style.animationPlayState = this.animationPlayState
134
+ return style
135
+ },
136
+ // 内部对用户传入的数据进一步分割,放到多个text标签循环,否则如果用户传入的字符串很长(100个字符以上)
137
+ // 放在一个text标签中进行滚动,在低端安卓机上,动画可能会出现抖动现象,需要分割到多个text中可解决此问题
138
+ innerText() {
139
+ let result = [],
140
+ // 每组text标签的字符长度
141
+ len = 20
142
+ const textArr = this.text.split('')
143
+ for (let i = 0; i < textArr.length; i += len) {
144
+ // 对拆分的后的text进行slice分割,得到的为数组再进行join拼接为字符串
145
+ result.push(textArr.slice(i, i + len).join(''))
146
+ }
147
+ return result
148
+ }
149
+ },
150
+ mounted() {
151
+ // #ifdef APP-PLUS
152
+ // 在APP上(含nvue),监听当前webview是否处于隐藏状态(进入下一页时即为hide状态)
153
+ // 如果webivew隐藏了,为了节省性能的损耗,应停止动画的执行,同时也是为了保持进入下一页返回后,滚动位置保持不变
154
+ var pages = getCurrentPages()
155
+ var page = pages[pages.length - 1]
156
+ var currentWebview = page.$getAppWebview()
157
+ currentWebview.addEventListener('hide', () => {
158
+ this.webviewHide = true
159
+ })
160
+ currentWebview.addEventListener('show', () => {
161
+ this.webviewHide = false
162
+ })
163
+ // #endif
164
+
165
+ this.init()
166
+ },
167
+ methods: {
168
+ init() {
169
+ // #ifdef APP-NVUE
170
+ this.nvue()
171
+ // #endif
172
+
173
+ // #ifndef APP-NVUE
174
+ this.vue()
175
+ // #endif
176
+
177
+ if(!uni.$u.test.string(this.text)) {
178
+ uni.$u.error('noticebar组件direction为row时,要求text参数为字符串形式')
179
+ }
180
+ },
181
+ // vue版处理
182
+ async vue() {
183
+ // #ifndef APP-NVUE
184
+ let boxWidth = 0,
185
+ textWidth = 0
186
+ // 进行一定的延时
187
+ await uni.$u.sleep()
188
+ // 查询盒子和文字的宽度
189
+ textWidth = (await this.$uGetRect('.u-notice__content__text')).width
190
+ boxWidth = (await this.$uGetRect('.u-notice__content')).width
191
+ // 根据t=s/v(时间=路程/速度),这里为何不需要加上#u-notice-box的宽度,因为中设置了.u-notice-content样式中设置了padding-left: 100%
192
+ // 恰巧计算出来的结果中已经包含了#u-notice-box的宽度
193
+ this.animationDuration = `${textWidth / uni.$u.getPx(this.speed)}s`
194
+ // 这里必须这样开始动画,否则在APP上动画速度不会改变
195
+ this.animationPlayState = 'paused'
196
+ setTimeout(() => {
197
+ this.animationPlayState = 'running'
198
+ }, 10)
199
+ // #endif
200
+ },
201
+ // nvue版处理
202
+ async nvue() {
203
+ // #ifdef APP-NVUE
204
+ this.nvueInit = false
205
+ let boxWidth = 0,
206
+ textWidth = 0
207
+ // 进行一定的延时
208
+ await uni.$u.sleep()
209
+ // 查询盒子和文字的宽度
210
+ textWidth = (await this.getNvueRect('u-notice__content__text')).width
211
+ boxWidth = (await this.getNvueRect('u-notice__content')).width
212
+ // 将文字移动到盒子的右边沿,之所以需要这么做,是因为nvue不支持100%单位,否则可以通过css设置
213
+ animation.transition(this.$refs['u-notice__content__text'], {
214
+ styles: {
215
+ transform: `translateX(${boxWidth}px)`
216
+ },
217
+ }, () => {
218
+ // 如果非禁止动画,则开始滚动
219
+ !this.stopAnimation && this.loopAnimation(textWidth, boxWidth)
220
+ });
221
+ // #endif
222
+ },
223
+ loopAnimation(textWidth, boxWidth) {
224
+ // #ifdef APP-NVUE
225
+ animation.transition(this.$refs['u-notice__content__text'], {
226
+ styles: {
227
+ // 目标移动终点为-textWidth,也即当文字的最右边贴到盒子的左边框的位置
228
+ transform: `translateX(-${textWidth}px)`
229
+ },
230
+ // 滚动时间的计算为,时间 = 路程(boxWidth + textWidth) / 速度,最后转为毫秒
231
+ duration: (boxWidth + textWidth) / uni.$u.getPx(this.speed) * 1000,
232
+ delay: 10
233
+ }, () => {
234
+ animation.transition(this.$refs['u-notice__content__text'], {
235
+ styles: {
236
+ // 重新将文字移动到盒子的右边沿
237
+ transform: `translateX(${this.stopAnimation ? 0 : boxWidth}px)`
238
+ },
239
+ }, () => {
240
+ // 如果非禁止动画,则继续下一轮滚动
241
+ if (!this.stopAnimation) {
242
+ // 判断是否需要初始化计算尺寸
243
+ if (this.nvueInit) {
244
+ this.nvue()
245
+ } else {
246
+ this.loopAnimation(textWidth, boxWidth)
247
+ }
248
+ }
249
+ });
250
+ })
251
+ // #endif
252
+ },
253
+ getNvueRect(el) {
254
+ // #ifdef APP-NVUE
255
+ // 返回一个promise
256
+ return new Promise(resolve => {
257
+ dom.getComponentRect(this.$refs[el], (res) => {
258
+ resolve(res.size)
259
+ })
260
+ })
261
+ // #endif
262
+ },
263
+ // 点击通告栏
264
+ clickHandler(index) {
265
+ this.$emit('click')
266
+ },
267
+ // 点击右侧按钮,需要判断点击的是关闭图标还是箭头图标
268
+ close() {
269
+ this.$emit('close')
270
+ }
271
+ },
272
+ // #ifdef APP-NVUE
273
+ beforeDestroy() {
274
+ this.stopAnimation = true
275
+ },
276
+ // #endif
277
+ };
278
+ </script>
279
+
280
+ <style lang="scss" scoped>
281
+ @import "../../libs/css/components.scss";
282
+
283
+ .u-notice {
284
+ @include flex;
285
+ align-items: center;
286
+ justify-content: space-between;
287
+
288
+ &__left-icon {
289
+ align-items: center;
290
+ margin-right: 5px;
291
+ }
292
+
293
+ &__right-icon {
294
+ margin-left: 5px;
295
+ align-items: center;
296
+ }
297
+
298
+ &__content {
299
+ text-align: right;
300
+ flex: 1;
301
+ @include flex;
302
+ flex-wrap: nowrap;
303
+ overflow: hidden;
304
+
305
+ &__text {
306
+ font-size: 14px;
307
+ color: $u-warning;
308
+ /* #ifndef APP-NVUE */
309
+ // 这一句很重要,为了能让滚动左右连接起来
310
+ padding-left: 100%;
311
+ word-break: keep-all;
312
+ white-space: nowrap;
313
+ animation: u-loop-animation 10s linear infinite both;
314
+ /* #endif */
315
+ @include flex(row);
316
+ }
317
+ }
318
+
319
+ }
320
+
321
+ @keyframes u-loop-animation {
322
+ 0% {
323
+ transform: translate3d(0, 0, 0);
324
+ }
325
+
326
+ 100% {
327
+ transform: translate3d(-100%, 0, 0);
328
+ }
329
+ }
330
+ </style>
@@ -0,0 +1,5 @@
1
+ export default {
2
+ props: {
3
+
4
+ }
5
+ }
@@ -0,0 +1,56 @@
1
+ <template>
2
+ <view
3
+ class="u-safe-bottom"
4
+ :style="[style]"
5
+ :class="[!isNvue && 'u-safe-area-inset-bottom']"
6
+ >
7
+ </view>
8
+ </template>
9
+
10
+ <script>
11
+ import props from "./props.js";
12
+ /**
13
+ * SafeBottom 底部安全区
14
+ * @description 这个适配,主要是针对IPhone X等一些底部带指示条的机型,指示条的操作区域与页面底部存在重合,容易导致用户误操作,因此我们需要针对这些机型进行底部安全区适配。
15
+ * @tutorial https://www.uviewui.com/components/safeAreaInset.html
16
+ * @property {type} prop_name
17
+ * @property {Object} customStyle 定义需要用到的外部样式
18
+ *
19
+ * @event {Function()}
20
+ * @example <u-status-bar></u-status-bar>
21
+ */
22
+ export default {
23
+ name: "u-safe-bottom",
24
+ mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
25
+ data() {
26
+ return {
27
+ safeAreaBottomHeight: 0,
28
+ isNvue: false,
29
+ };
30
+ },
31
+ computed: {
32
+ style() {
33
+ const style = {};
34
+ // #ifdef APP-NVUE
35
+ // nvue下,高度使用js计算填充
36
+ style.height = uni.$u.addUnit(uni.$u.sys().safeAreaInsets.bottom, 'px');
37
+ // #endif
38
+ return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
39
+ },
40
+ },
41
+ mounted() {
42
+ // #ifdef APP-NVUE
43
+ // 标识为是否nvue
44
+ this.isNvue = true;
45
+ // #endif
46
+ },
47
+ };
48
+ </script>
49
+
50
+ <style lang="scss" scoped>
51
+ .u-safe-bottom {
52
+ /* #ifndef APP-NVUE */
53
+ width: 100%;
54
+ /* #endif */
55
+ }
56
+ </style>
@@ -0,0 +1,28 @@
1
+ // 引入bindingx,此库类似于微信小程序wxs,目的是让js运行在视图层,减少视图层和逻辑层的通信折损
2
+ const BindingX = uni.requireNativePlugin('bindingx')
3
+
4
+ export default {
5
+ methods: {
6
+ // 此处不写注释,请自行体会
7
+ nvueScrollHandler(e) {
8
+ const anchor = this.$refs['u-scroll-list__scroll-view'].ref
9
+ const element = this.$refs['u-scroll-list__indicator__line__bar'].ref
10
+ const scrollLeft = e.contentOffset.x
11
+ const contentSize = e.contentSize.width
12
+ const { scrollWidth } = this
13
+ const barAllMoveWidth = this.indicatorWidth - this.indicatorBarWidth
14
+ // 在安卓和iOS上,需要除的倍数不一样,iOS需要除以2
15
+ const actionNum = uni.$u.os() === 'ios' ? 2 : 1
16
+ const expression = `(x / ${actionNum}) / ${contentSize - scrollWidth} * ${barAllMoveWidth}`
17
+ BindingX.bind({
18
+ anchor,
19
+ eventType: 'scroll',
20
+ props: [{
21
+ element,
22
+ property: 'transform.translateX',
23
+ expression
24
+ }]
25
+ })
26
+ }
27
+ }
28
+ }
File without changes
@@ -0,0 +1,34 @@
1
+ export default {
2
+ props: {
3
+ // 指示器的整体宽度
4
+ indicatorWidth: {
5
+ type: [String, Number],
6
+ default: uni.$u.props.scrollList.indicatorWidth
7
+ },
8
+ // 滑块的宽度
9
+ indicatorBarWidth: {
10
+ type: [String, Number],
11
+ default: uni.$u.props.scrollList.indicatorBarWidth
12
+ },
13
+ // 是否显示面板指示器
14
+ indicator: {
15
+ type: Boolean,
16
+ default: uni.$u.props.scrollList.indicator
17
+ },
18
+ // 指示器非激活颜色
19
+ indicatorColor: {
20
+ type: String,
21
+ default: uni.$u.props.scrollList.indicatorColor
22
+ },
23
+ // 指示器的激活颜色
24
+ indicatorActiveColor: {
25
+ type: String,
26
+ default: uni.$u.props.scrollList.indicatorActiveColor
27
+ },
28
+ // 指示器样式,可通过bottom,left,right进行定位
29
+ indicatorStyle: {
30
+ type: [String, Object],
31
+ default: uni.$u.props.scrollList.indicatorStyle
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,50 @@
1
+ function scroll(event, ownerInstance) {
2
+ // detail中含有scroll-view的信息,比如scroll-view的实际宽度,当前时间点scroll-view的移动距离等
3
+ var detail = event.detail
4
+ var scrollWidth = detail.scrollWidth
5
+ var scrollLeft = detail.scrollLeft
6
+ // 获取当前组件的dataset,说白了就是祸国殃民的腾xun搞出来的垃ji
7
+ var dataset = event.currentTarget.dataset
8
+ // 此为scroll-view外部包裹元素的宽度
9
+ // 某些HX版本(3.1.18),发现view元素中大写的data-scrollWidth,在wxs中,变成了全部小写,所以这里需要特别处理
10
+ var scrollComponentWidth = dataset.scrollWidth || dataset.scrollwidth || 0
11
+ // 指示器和滑块的宽度
12
+ var indicatorWidth = dataset.indicatorWidth || dataset.indicatorwidth || 0
13
+ var barWidth = dataset.barWidth || dataset.barwidth || 0
14
+ // 此处的计算理由为:scroll-view的滚动距离与目标滚动距离(scroll-view的实际宽度减去包裹元素的宽度)之比,等于滑块当前移动距离与总需
15
+ // 滑动距离(指示器的总宽度减去滑块宽度)的比值
16
+ var x = scrollLeft / (scrollWidth - scrollComponentWidth) * (indicatorWidth - barWidth)
17
+ setBarStyle(ownerInstance, x)
18
+ }
19
+
20
+ // 由于webview的无能,无法保证scroll-view在滑动过程中,一直触发scroll事件,会导致
21
+ // 无法监听到某些滚动值,当在首尾临界值无法监听到时,这是致命的,因为错失这些值会导致滑块无法回到起点和终点
22
+ // 所以这里需要对临界值做监听并处理
23
+ function scrolltolower(event, ownerInstance) {
24
+ ownerInstance.callMethod('scrollEvent', 'right')
25
+ // 获取当前组件的dataset
26
+ var dataset = event.currentTarget.dataset
27
+ // 指示器和滑块的宽度
28
+ var indicatorWidth = dataset.indicatorWidth || dataset.indicatorwidth || 0
29
+ var barWidth = dataset.barWidth || dataset.barwidth || 0
30
+ // scroll-view滚动到右边终点时,将滑块也设置为到右边的终点,它所需移动的距离为:指示器宽度 - 滑块宽度
31
+ setBarStyle(ownerInstance, indicatorWidth - barWidth)
32
+ }
33
+
34
+ function scrolltoupper(event, ownerInstance) {
35
+ ownerInstance.callMethod('scrollEvent', 'left')
36
+ // 滚动到左边时,将滑块设置为0的偏移距离,回到起点
37
+ setBarStyle(ownerInstance, 0)
38
+ }
39
+
40
+ function setBarStyle(ownerInstance, x) {
41
+ ownerInstance.selectComponent('.u-scroll-list__indicator__line__bar') && ownerInstance.selectComponent('.u-scroll-list__indicator__line__bar').setStyle({
42
+ transform: 'translateX(' + x + 'px)'
43
+ })
44
+ }
45
+
46
+ module.exports = {
47
+ scroll: scroll,
48
+ scrolltolower: scrolltolower,
49
+ scrolltoupper: scrolltoupper
50
+ }