82 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Vue
		
	
	
| <docs>
 | |
| ---
 | |
| order: 2
 | |
| title:
 | |
|   zh-CN: 带 icon 的滑块
 | |
|   en-US: Slider with icon
 | |
| ---
 | |
| 
 | |
| ## zh-CN
 | |
| 
 | |
| 滑块左右可以设置图标来表达业务含义。
 | |
| 
 | |
| ## en-US
 | |
| 
 | |
| You can add an icon beside the slider to make it meaningful.
 | |
| </docs>
 | |
| 
 | |
| <template>
 | |
|   <div class="icon-wrapper">
 | |
|     <frown-outlined :style="{ color: preColor }" />
 | |
|     <a-slider v-model:value="sliderValue" :min="0" :max="20" />
 | |
|     <smile-outlined :style="{ color: nextColor }" />
 | |
|   </div>
 | |
| </template>
 | |
| <script lang="ts">
 | |
| import { defineComponent, ref, computed } from 'vue';
 | |
| import { FrownOutlined, SmileOutlined } from '@ant-design/icons-vue';
 | |
| export default defineComponent({
 | |
|   components: {
 | |
|     FrownOutlined,
 | |
|     SmileOutlined,
 | |
|   },
 | |
|   setup() {
 | |
|     const sliderValue = ref<number>(0);
 | |
|     const min = ref<number>(0);
 | |
|     const max = ref<number>(20);
 | |
| 
 | |
|     const preColor = computed(() => {
 | |
|       const mid = +((max.value - min.value) / 2).toFixed(5);
 | |
|       return sliderValue.value >= mid ? '' : 'rgba(0, 0, 0, .45)';
 | |
|     });
 | |
| 
 | |
|     const nextColor = computed(() => {
 | |
|       const mid = +((max.value - min.value) / 2).toFixed(5);
 | |
|       return sliderValue.value >= mid ? 'rgba(0, 0, 0, .45)' : '';
 | |
|     });
 | |
| 
 | |
|     return {
 | |
|       sliderValue,
 | |
|       min,
 | |
|       max,
 | |
|       preColor,
 | |
|       nextColor,
 | |
|     };
 | |
|   },
 | |
| });
 | |
| </script>
 | |
| <style scoped>
 | |
| .icon-wrapper {
 | |
|   position: relative;
 | |
|   padding: 0px 30px;
 | |
| }
 | |
| 
 | |
| .icon-wrapper .anticon {
 | |
|   position: absolute;
 | |
|   top: -2px;
 | |
|   width: 16px;
 | |
|   height: 16px;
 | |
|   line-height: 1;
 | |
|   font-size: 16px;
 | |
|   color: rgba(0, 0, 0, 0.25);
 | |
| }
 | |
| 
 | |
| .icon-wrapper .anticon:first-child {
 | |
|   left: 0;
 | |
| }
 | |
| 
 | |
| .icon-wrapper .anticon:last-child {
 | |
|   right: 0;
 | |
| }
 | |
| </style>
 |