视频:

屏幕录制2019-12-14下午10.33.59.mov (1.05MB)

源文件:PageControls_Starter.framerx.zip

代码:

  1. import { Override, Data } from "framer"
  2. //State
  3. const data = Data({
  4. page: 0,
  5. min: 0,
  6. max: 2,
  7. })
  8. // OVERRIDES
  9. export function Page(props): Override {
  10. //下面这样可以算出page组件总共有几个子组件
  11. const pagesLength = props.children[0].props.children.length
  12. console.log(pagesLength)
  13. data.max = pagesLength - 1
  14. return {
  15. currentPage: data.page,
  16. onChangePage(current) {
  17. data.page = current
  18. },
  19. }
  20. }
  21. export function PageNumber(): Override {
  22. return {
  23. text: data.page.toString(),
  24. }
  25. }
  26. export function LeftButton(): Override {
  27. return {
  28. disabled: data.page === data.min,
  29. // ==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,
  30. // ===严格比较,只要类型不匹配就返回flase。
  31. onClick: () => {
  32. if (data.page > data.min) {
  33. data.page -= 1
  34. }
  35. },
  36. }
  37. }
  38. export function RightButton(): Override {
  39. return {
  40. disabled: data.page === data.max,
  41. // ==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,
  42. // ===严格比较,只要类型不匹配就返回flase。
  43. onClick: () => {
  44. if (data.page < data.max) {
  45. data.page += 1
  46. }
  47. },
  48. //这里不知道为什么用onTap就不行 头疼
  49. }
  50. }
  51. export function SkipButton(): Override {
  52. return {
  53. disabled: data.page === data.max,
  54. // ==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,
  55. // ===严格比较,只要类型不匹配就返回flase。
  56. onClick: () => {
  57. if (data.page < data.max) {
  58. data.page = data.max
  59. }
  60. },
  61. }
  62. }

主要难点:

=== 三个等于号表示前后判断,返回的是 bollen 类型 (true or false)

const pagesLength = props.children[0].props.children.length
//这个可以计算出 Page组件的自组件的长度

text: data.page.toString()
//这里data.page返回的是number类型,通过toString()的方法可以将类型变为string