diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-12-27 22:59:14 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-12-27 22:59:14 +0900 |
| commit | ae2d71553e92b324f59c15d2b151b2583a6e65ab (patch) | |
| tree | f5a01757ee0477f21104fd59a9ec25e80e31b6eb /packages/client/src/components/form/switch.vue | |
| parent | Update const.ts (diff) | |
| download | misskey-ae2d71553e92b324f59c15d2b151b2583a6e65ab.tar.gz misskey-ae2d71553e92b324f59c15d2b151b2583a6e65ab.tar.bz2 misskey-ae2d71553e92b324f59c15d2b151b2583a6e65ab.zip | |
enhance(client): :art:
Diffstat (limited to 'packages/client/src/components/form/switch.vue')
| -rw-r--r-- | packages/client/src/components/form/switch.vue | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/packages/client/src/components/form/switch.vue b/packages/client/src/components/form/switch.vue index aa28292b97..aa9b09215e 100644 --- a/packages/client/src/components/form/switch.vue +++ b/packages/client/src/components/form/switch.vue @@ -9,7 +9,7 @@ :disabled="disabled" @keydown.enter="toggle" > - <span v-adaptive-border v-tooltip="checked ? $ts.itsOn : $ts.itsOff" class="button" @click.prevent="toggle"> + <span ref="button" v-adaptive-border v-tooltip="checked ? $ts.itsOn : $ts.itsOff" class="button" @click.prevent="toggle"> <i class="check fas fa-check"></i> </span> <span class="label"> @@ -20,7 +20,9 @@ </template> <script lang="ts"> -import { defineComponent } from 'vue'; +import { defineComponent, ref, toRefs } from 'vue'; +import * as os from '@/os'; +import Ripple from '@/components/ripple.vue'; export default defineComponent({ props: { @@ -33,17 +35,28 @@ export default defineComponent({ default: false } }, - computed: { - checked(): boolean { - return this.modelValue; - } + + setup(props, context) { + const button = ref<HTMLElement>(); + const checked = toRefs(props).modelValue; + const toggle = () => { + if (props.disabled) return; + context.emit('update:modelValue', !checked.value); + + if (!checked.value) { + const rect = button.value.getBoundingClientRect(); + const x = rect.left + (button.value.offsetWidth / 2); + const y = rect.top + (button.value.offsetHeight / 2); + os.popup(Ripple, { x, y, particle: false }, {}, 'end'); + } + }; + + return { + button, + checked, + toggle, + }; }, - methods: { - toggle() { - if (this.disabled) return; - this.$emit('update:modelValue', !this.checked); - } - } }); </script> @@ -51,7 +64,7 @@ export default defineComponent({ .ziffeoms { position: relative; display: flex; - transition: all 0.2s; + transition: all 0.2s ease; > * { user-select: none; @@ -85,6 +98,8 @@ export default defineComponent({ opacity: 0; color: var(--fgOnAccent); font-size: 13px; + transform: scale(0.5); + transition: all 0.2s ease; } } @@ -131,6 +146,7 @@ export default defineComponent({ > .check { opacity: 1; + transform: scale(1); } } } |