index.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <template>
  2. <view class="content">
  3. <view class="text-center mrg50T"><text class="title">区间选择滑块/范围选择滑块</text></view>
  4. <view class="part part1 mrg50T">
  5. <view class="title">1. 默认示例:</view>
  6. <view class="text-center mrg10T">
  7. <text>区间:</text>
  8. <text>{{ rangeValues[0] }}</text>
  9. <text>~</text>
  10. <text>{{ rangeValues[1] }}</text>
  11. </view>
  12. <view class="rowBox mrg50T">
  13. <view class="sliderBox">
  14. <RangeSlider
  15. :width="slideWidth"
  16. :height="slideHeight"
  17. :blockSize="slideBlockSize"
  18. :min="slideMin"
  19. :max="slideMax"
  20. :values="rangeValues"
  21. :step="step"
  22. :liveMode="isLiveMode"
  23. @rangechange="onRangeChange"
  24. >
  25. <view slot="minBlock" class="range-slider-block"></view>
  26. <!-- 左边滑块的内容 -->
  27. <view slot="maxBlock" class="range-slider-block"></view>
  28. <!-- 右边滑块的内容 -->
  29. </RangeSlider>
  30. </view>
  31. </view>
  32. <button @tap="test" class="testBtn">手动设置为10~60</button>
  33. </view>
  34. <view class="part part2 mrg50T">
  35. <view class="title">2. 示例:将原始数据格式化为时间显示</view>
  36. <view class="text-center mrg50T">
  37. <RangeSlider
  38. :width="slideWidth"
  39. :height="slideHeight"
  40. :blockSize="slideBlockSize"
  41. :min="timeMinValue"
  42. :max="timeMaxValue"
  43. :activeColor="'#E68B28'"
  44. :values="rangeValues2"
  45. @rangechange="onRangeChange2"
  46. >
  47. <view slot="minBlock" class="range-slider-block"></view>
  48. <!-- 左边滑块的内容 -->
  49. <view slot="maxBlock" class="range-slider-block"></view>
  50. <!-- 右边滑块的内容 -->
  51. </RangeSlider>
  52. <text class="plan-unit">{{ serTime }}</text>
  53. </view>
  54. </view>
  55. <view class="part part3 mrg50T">
  56. <view class="title">3. 示例:页面第三个滑块</view>
  57. <view class="text-center mrg10T">
  58. <text>区间:</text>
  59. <text>{{ rangeValues3[0] }}</text>
  60. <text>~</text>
  61. <text>{{ rangeValues3[1] }}</text>
  62. </view>
  63. <view class="text-center mrg50T">
  64. <RangeSlider
  65. :width="slideWidth"
  66. :height="slideHeight"
  67. :blockSize="slideBlockSize"
  68. :min="slideMin"
  69. :max="slideMax"
  70. :values="rangeValues3"
  71. :step="step"
  72. :liveMode="isLiveMode"
  73. @rangechange="onRangeChange3"
  74. >
  75. <view slot="minBlock" class="range-slider-block"></view>
  76. <!-- 左边滑块的内容 -->
  77. <view slot="maxBlock" class="range-slider-block"></view>
  78. <!-- 右边滑块的内容 -->
  79. </RangeSlider>
  80. </view>
  81. </view>
  82. <text class="tips">修改自:https://github.com/Money888/wechat-rangeslider</text>
  83. </view>
  84. </template>
  85. <script>
  86. import RangeSlider from '../../components/range-slider/range-slider.vue';
  87. export default {
  88. data() {
  89. return {
  90. // rangeValues: [2, 5], //当前区间值
  91. // slideWidth: 350, //宽度
  92. // slideHeight: 80, //高度
  93. // slideBlockSize: 56, //圆形按钮大小
  94. // slideMin: 0, //slider最小值
  95. // slideMax: 12, //slider最大值
  96. rangeValues: [4, 5.2],
  97. slideWidth: 350,
  98. slideHeight: 80,
  99. slideBlockSize: 30,
  100. slideMin: 0,
  101. slideMax: 10,
  102. isLiveMode: true,
  103. step: 0.1,
  104. //
  105. timeMinValue: 0,
  106. timeMaxValue: 10,
  107. rangeValues2: [1, 6],
  108. serTime: '02:24:00-14:24:00',
  109. rangeValues3: [3, 5]
  110. };
  111. },
  112. components: {
  113. RangeSlider
  114. },
  115. onLoad() {
  116. console.log('index onload');
  117. },
  118. methods: {
  119. pad: function(num, n) {
  120. return Array(n - ('' + num).length + 1).join(0) + num;
  121. },
  122. onRangeChange: function(e) {
  123. this.rangeValues = [e.minValue, e.maxValue];
  124. console.log(this.rangeValues);
  125. console.log(JSON.stringify(e));
  126. },
  127. test: function() {
  128. this.rangeValues = [4.2, 6.6];
  129. },
  130. onRangeChange2: function(e) {
  131. let startTime = this.formatTimeBySliderValue(e.originalValue.minValue);
  132. let endTime = this.formatTimeBySliderValue(e.originalValue.maxValue);
  133. this.serTime = startTime + '-' + endTime;
  134. },
  135. onRangeChange3: function(e) {
  136. this.rangeValues3 = [e.minValue, e.maxValue];
  137. },
  138. formatTimeBySliderValue(value) {
  139. //按比例,将滑块上面的数值进行转换为时间形式
  140. //转换为分钟数
  141. let minutes = (24 * 60 * value) / this.slideMax;
  142. //转换为小时数
  143. let hours = parseInt(minutes / 60);
  144. //剩余分钟数
  145. let minutes_min = parseInt(minutes % 60);
  146. return '' + this.pad(hours, 2) + ':' + this.pad(minutes_min, 2) + ':' + '00';
  147. }
  148. }
  149. };
  150. </script>
  151. <style lang="scss">
  152. view {
  153. display: flex;
  154. }
  155. .content {
  156. justify-content: center;
  157. flex-direction: column;
  158. }
  159. .sliderBox {
  160. justify-content: center;
  161. margin-right: 50rpx;
  162. }
  163. .text-center {
  164. justify-content: center;
  165. }
  166. .rowBox {
  167. flex-direction: row;
  168. align-items: center;
  169. justify-content: center;
  170. }
  171. .mrg10T {
  172. margin-top: 10rpx;
  173. }
  174. .tips {
  175. color: #999;
  176. font-size: 24rpx;
  177. text-align: center;
  178. margin-top: 100rpx;
  179. }
  180. .testBtn {
  181. margin-top: 50rpx;
  182. }
  183. .part {
  184. flex-direction: column;
  185. justify-content: center;
  186. border-top: 1rpx solid #ccc;
  187. padding-top: 50rpx;
  188. .title {
  189. font-size: 32rpx;
  190. padding: 0 30rpx;
  191. }
  192. }
  193. .part2 {
  194. margin-top: 100rpx;
  195. }
  196. </style>