button.uvue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <script>
  2. import { ItemType } from '@/components/enum-data/enum-data-types'
  3. export default {
  4. data() {
  5. return {
  6. plain_boolean: false,
  7. disabled_boolean: false,
  8. default_style: false,
  9. size_enum: [{ "value": 0, "name": "default" }, { "value": 1, "name": "mini" }] as ItemType[],
  10. size_enum_current: 0,
  11. type_enum: [{ "value": 0, "name": "default" }, { "value": 1, "name": "primary" }, { "value": 2, "name": "warn" }] as ItemType[],
  12. type_enum_current: 0,
  13. count: 0,
  14. text: ''
  15. }
  16. },
  17. onReady() {
  18. this.text = 'uni-app-x'
  19. },
  20. methods: {
  21. button_click() {
  22. console.log("组件被点击时触发")
  23. this.count++
  24. },
  25. button_touchstart() { console.log("手指触摸动作开始") },
  26. button_touchmove() { console.log("手指触摸后移动") },
  27. button_touchcancel() { console.log("手指触摸动作被打断,如来电提醒,弹窗") },
  28. button_touchend() { console.log("手指触摸动作结束") },
  29. button_tap() { console.log("手指触摸后马上离开") },
  30. button_longpress() { console.log("如果一个组件被绑定了 longpress 事件,那么当用户长按这个组件时,该事件将会被触发。") },
  31. change_plain_boolean(checked : boolean) { this.plain_boolean = checked },
  32. change_disabled_boolean(checked : boolean) { this.disabled_boolean = checked },
  33. change_default_style(checked : boolean) { this.default_style = checked },
  34. radio_change_size_enum(checked : number) { this.size_enum_current = checked },
  35. radio_change_type_enum(checked : number) { this.type_enum_current = checked },
  36. confirm_text_input(value : string) { this.text = value },
  37. navigateToChild() {
  38. uni.navigateTo({
  39. url: 'buttonstatus',
  40. })
  41. },
  42. openPrivacyDialog() {
  43. uni.openDialogPage({
  44. url: '/pages/component/button/privacy',
  45. })
  46. },
  47. //用于自动化测试
  48. checkUniButtonElement() : boolean {
  49. const button = uni.getElementById("testButton")
  50. if (button != null && button instanceof UniButtonElement) {
  51. return true
  52. }
  53. return false
  54. }
  55. }
  56. }
  57. </script>
  58. <template>
  59. <view class="main">
  60. <button id="testButton" :disabled="disabled_boolean" :size="size_enum[size_enum_current].name"
  61. :type="type_enum[type_enum_current].name" :plain="plain_boolean" @click="button_click"
  62. @touchstart="button_touchstart" @touchmove="button_touchmove" @touchcancel="button_touchcancel"
  63. @touchend="button_touchend" @tap="button_tap" @longpress="button_longpress" class="btn"
  64. :class="default_style ? (disabled_boolean ? 'custom-btn-disable' : 'custom-btn') : ''"
  65. :hover-class="default_style ? 'is-hover' : 'button-hover'">
  66. {{ text }}
  67. </button>
  68. </view>
  69. <scroll-view style="flex: 1">
  70. <view class="content">
  71. <boolean-data :defaultValue="false" title="按钮是否镂空,背景色透明" @change="change_plain_boolean"></boolean-data>
  72. <boolean-data :defaultValue="false" title="是否禁用" @change="change_disabled_boolean"></boolean-data>
  73. <boolean-data :defaultValue="false" title="修改默认样式和点击效果(高优先)" @change="change_default_style"></boolean-data>
  74. <enum-data :items="size_enum" title="按钮的大小" @change="radio_change_size_enum"></enum-data>
  75. <enum-data :items="type_enum" title="按钮的类型" @change="radio_change_type_enum"></enum-data>
  76. <input-data :defaultValue="text" title="按钮的文案" type="text" @confirm="confirm_text_input"></input-data>
  77. <view style="height: 10px;"></view>
  78. <button @click="navigateToChild">更多示例</button>
  79. <view style="height: 10px;"></view>
  80. <!-- #ifdef APP -->
  81. <button @click="openPrivacyDialog">open-type实现App隐私政策弹框</button>
  82. <view style="height: 10px;"></view>
  83. <!-- #endif -->
  84. </view>
  85. </scroll-view>
  86. </template>
  87. <style>
  88. .main {
  89. padding: 5px 0;
  90. border-bottom: 1px solid rgba(0, 0, 0, 0.06);
  91. flex-direction: row;
  92. justify-content: center;
  93. }
  94. .custom-btn {
  95. color: #ffffff;
  96. background-color: #1AAD19;
  97. border-color: #1AAD19;
  98. }
  99. .custom-btn-disable {
  100. color: rgba(255, 255, 255, 0.7);
  101. background-color: rgba(26, 173, 25, 0.7);
  102. border-color: rgba(26, 173, 25, 0.7);
  103. }
  104. .is-hover {
  105. color: rgba(255, 255, 255, 0.6);
  106. background-color: #179b16;
  107. border-color: #179b16;
  108. }
  109. .button-hover {
  110. color: rgba(0, 0, 0, 0.6);
  111. background-color: #dedede;
  112. }
  113. .default-button{
  114. color: #000000;
  115. background-color: #f8f8f8;
  116. border-color: rgba(0, 0, 0, 0.2);
  117. }
  118. </style>