slider.wxml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <wxs src="./slider.wxs" module="t" />
  2. <wxs src="../common/utils.wxs" module="_" />
  3. <view
  4. style="{{_._style([style, customStyle])}}"
  5. class="{{_.cls(classPrefix, [['top', label || scaleTextArray.length], ['disabled', disabled], ['range', range]])}} class {{prefix}}-class {{vertical ? classPrefix + '--vertical' : ''}}"
  6. >
  7. <block wx:if="{{!range}}">
  8. <text wx:if="{{showExtremeValue}}" class="{{classPrefix}}__value {{classPrefix}}__value--min">
  9. {{ label ? t.getValue(label, min) : min}}
  10. </text>
  11. <view
  12. id="sliderLine"
  13. class="{{_.cls(classPrefix + '__bar', [['disabled', disabled], theme, ['marks', isScale && theme == 'capsule']])}} {{prefix}}-class-bar"
  14. bind:tap="onSingleLineTap"
  15. >
  16. <block wx:if="{{isScale}}">
  17. <view
  18. class="{{_.cls(classPrefix + '__scale-item', [['active', _value >= item.val], ['disabled', disabled], theme, ['hidden', (index == 0 || index == scaleArray.length - 1) && theme == 'capsule' || value == item.val]])}}"
  19. wx:for="{{scaleArray}}"
  20. wx:key="index"
  21. style="{{vertical ? 'top' : 'left'}}:{{item.left}}px; {{vertical ? 'transform: translate(-50%, -50%);' : 'transform: translateX(-50%);'}}"
  22. aria-hidden="{{true}}"
  23. >
  24. <view wx:if="{{scaleTextArray.length}}" class="{{_.cls(classPrefix + '__scale-desc', [theme])}}">
  25. {{scaleTextArray[index]}}
  26. </view>
  27. </view>
  28. </block>
  29. <view
  30. class="{{_.cls(classPrefix + '__line', [['disabled', disabled], theme, 'single'])}} {{prefix}}-class-bar-active"
  31. style="{{vertical ? 'height' : 'width'}}: {{lineBarWidth}}"
  32. >
  33. <view
  34. id="singleDot"
  35. class="{{classPrefix}}__dot {{prefix}}-class-cursor"
  36. catch:touchstart="onTouchStart"
  37. catch:touchmove="onSingleLineTap"
  38. catch:touchend="onTouchEnd"
  39. catch:touchcancel="onTouchEnd"
  40. >
  41. <view
  42. wx:if="{{label || isVisibleToScreenReader}}"
  43. class="{{_.cls(classPrefix+'__dot-value', [['sr-only', !label]])}}"
  44. aria-role="alert"
  45. aria-live="assertive"
  46. aria-hidden="{{!isVisibleToScreenReader}}"
  47. >
  48. {{t.getValue(label, _value) || _value}}
  49. </view>
  50. <view
  51. class="{{classPrefix}}__dot-slider"
  52. aria-role="slider"
  53. aria-disabled="{{disabled}}"
  54. aria-valuemax="{{max}}"
  55. aria-valuemin="{{min}}"
  56. aria-valuenow="{{_value}}"
  57. aria-valuetext="{{t.getValue(label, _value) || _value}}"
  58. ></view>
  59. </view>
  60. </view>
  61. </view>
  62. <!-- <view wx:if="{{label}}" class="{{classPrefix}}__value {{classPrefix}}__value--right">
  63. <text class="{{classPrefix}}__value--text"> {{t.getValue(label, _value)}}</text>
  64. </view> -->
  65. <text wx:if="{{showExtremeValue}}" class="{{classPrefix}}__value {{classPrefix}}__value--max">
  66. {{ label ? t.getValue(label, max) : max}}
  67. </text>
  68. </block>
  69. <!-- range选择器自定义 -->
  70. <block wx:if="{{range}}">
  71. <view wx:if="{{showExtremeValue}}" class="{{classPrefix}}__range-extreme {{classPrefix}}__range-extreme--min">
  72. {{min}}
  73. </view>
  74. <view
  75. id="sliderLine"
  76. bind:tap="onLineTap"
  77. class="{{_.cls(classPrefix + '__bar', [['disabled', disabled], theme, ['marks', isScale && theme == 'capsule']])}} {{prefix}}-class-bar"
  78. >
  79. <block wx:if="{{isScale}}">
  80. <view
  81. class="{{_.cls(classPrefix + '__scale-item', [['active', dotTopValue[1] >= item.val && item.val >= dotTopValue[0]], ['disabled', disabled], theme, ['hidden', (index == 0 || index == scaleArray.length - 1) && theme == 'capsule' || value == item.val]])}}"
  82. wx:for="{{scaleArray}}"
  83. wx:for-index="index"
  84. wx:key="index"
  85. style="{{vertical ? 'top' : 'left'}}:{{item.left}}px; {{vertical ? 'transform: translate(-50%, -50%);' : 'transform: translateX(-50%);'}}"
  86. aria-hidden="{{true}}"
  87. >
  88. <view wx:if="{{scaleTextArray.length}}" class="{{_.cls(classPrefix + '__scale-desc', [theme])}}"
  89. >{{scaleTextArray[index]}}</view
  90. >
  91. </view>
  92. </block>
  93. <view
  94. class="{{_.cls(classPrefix + '__line', [['disabled', disabled], theme])}} {{prefix}}-class-bar-active"
  95. style="{{vertical ? 'top' : 'left'}}: {{lineLeft}}px; {{vertical ? 'bottom' : 'right'}}: {{lineRight}}px"
  96. >
  97. <view
  98. id="leftDot"
  99. catch:touchstart="onTouchStart"
  100. catch:touchmove="onTouchMoveLeft"
  101. catch:touchend="onTouchEnd"
  102. catch:touchcancel="onTouchEnd"
  103. class="{{classPrefix}}__dot {{classPrefix}}__dot--left {{prefix}}-class-cursor"
  104. >
  105. <view
  106. wx:if="{{label || isVisibleToScreenReader}}"
  107. class="{{_.cls(classPrefix+'__dot-value', [['sr-only', !label]])}}"
  108. aria-role="alert"
  109. aria-live="assertive"
  110. aria-hidden="{{!isVisibleToScreenReader}}"
  111. >
  112. {{t.getValue(label, dotTopValue[0]) || dotTopValue[0]}}
  113. </view>
  114. <view
  115. class="{{classPrefix}}__dot-slider"
  116. aria-role="slider"
  117. aria-disabled="{{disabled}}"
  118. aria-valuemax="{{max}}"
  119. aria-valuemin="{{min}}"
  120. aria-valuenow="{{dotTopValue[0]}}"
  121. aria-valuetext="{{t.getValue(label, dotTopValue[0]) || dotTopValue[0]}}"
  122. ></view>
  123. </view>
  124. <view
  125. id="rightDot"
  126. catch:touchstart="onTouchStart"
  127. catch:touchmove="onTouchMoveRight"
  128. catch:touchend="onTouchEnd"
  129. catch:touchcancel="onTouchEnd"
  130. class="{{classPrefix}}__dot {{classPrefix}}__dot--right {{prefix}}-class-cursor"
  131. >
  132. <view
  133. wx:if="{{label || isVisibleToScreenReader}}"
  134. class="{{_.cls(classPrefix+'__dot-value', [['sr-only', !label]])}}"
  135. aria-role="alert"
  136. aria-live="assertive"
  137. aria-hidden="{{!isVisibleToScreenReader}}"
  138. >
  139. {{t.getValue(label, dotTopValue[1]) || dotTopValue[1]}}
  140. </view>
  141. <view
  142. class="{{classPrefix}}__dot-slider"
  143. aria-role="slider"
  144. aria-disabled="{{disabled}}"
  145. aria-valuemax="{{max}}"
  146. aria-valuemin="{{min}}"
  147. aria-valuenow="{{dotTopValue[1]}}"
  148. aria-valuetext="{{t.getValue(label, dotTopValue[1]) || dotTopValue[1]}}"
  149. >
  150. </view>
  151. </view>
  152. </view>
  153. </view>
  154. <view wx:if="{{showExtremeValue}}" class="{{classPrefix}}__range-extreme {{classPrefix}}__range-extreme--max">
  155. {{max}}
  156. </view>
  157. </block>
  158. </view>