| <template> | |
| <div class="element-opacity"> | |
| <div class="row"> | |
| <div style="width: 40%;">不透明度:</div> | |
| <Slider | |
| :min="0" | |
| :max="1" | |
| :step="0.1" | |
| :value="opacity" | |
| @update:value="value => updateOpacity(value as number)" | |
| style="width: 60%;" | |
| /> | |
| </div> | |
| </div> | |
| </template> | |
| <script lang="ts" setup> | |
| import { ref, watch } from 'vue' | |
| import { storeToRefs } from 'pinia' | |
| import { useMainStore, useSlidesStore } from '@/store' | |
| import useHistorySnapshot from '@/hooks/useHistorySnapshot' | |
| import Slider from '@/components/Slider.vue' | |
| const slidesStore = useSlidesStore() | |
| const { handleElement } = storeToRefs(useMainStore()) | |
| const opacity = ref<number>(1) | |
| watch(handleElement, () => { | |
| if (!handleElement.value) return | |
| opacity.value = 'opacity' in handleElement.value && handleElement.value.opacity !== undefined ? handleElement.value.opacity : 1 | |
| }, { deep: true, immediate: true }) | |
| const { addHistorySnapshot } = useHistorySnapshot() | |
| const updateOpacity = (value: number) => { | |
| if (!handleElement.value) return | |
| const props = { opacity: value } | |
| slidesStore.updateElement({ id: handleElement.value.id, props }) | |
| addHistorySnapshot() | |
| } | |
| </script> | |
| <style lang="scss" scoped> | |
| .row { | |
| width: 100%; | |
| display: flex; | |
| align-items: center; | |
| margin-bottom: 10px; | |
| } | |
| </style> |