From 592eded22171a8615f5fdf63d4bd7e143c3e2ef9 Mon Sep 17 00:00:00 2001 From: Alexis <35.alexis.pele@gmail.com> Date: Tue, 9 May 2023 10:42:38 +0200 Subject: [PATCH] Added sound on hover/focus --- env.d.ts | 1 + package-lock.json | 49 ++++++++++++++++++++++++++++++++ package.json | 1 + src/assets/sounds/btn-hover.mp3 | Bin 0 -> 4946 bytes src/components/YrhButton.vue | 8 ++++++ 5 files changed, 59 insertions(+) create mode 100644 src/assets/sounds/btn-hover.mp3 diff --git a/env.d.ts b/env.d.ts index 11f02fe..4791171 100644 --- a/env.d.ts +++ b/env.d.ts @@ -1 +1,2 @@ /// +declare module '@vueuse/sound' diff --git a/package-lock.json b/package-lock.json index d038b85..f16c7bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@fortawesome/free-solid-svg-icons": "^6.4.0", "@fortawesome/vue-fontawesome": "^3.0.3", "@vueuse/core": "^10.1.2", + "@vueuse/sound": "^2.0.1", "pinia": "^2.0.35", "sass": "^1.62.1", "vue": "^3.2.47", @@ -1571,6 +1572,49 @@ } } }, + "node_modules/@vueuse/sound": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vueuse/sound/-/sound-2.0.1.tgz", + "integrity": "sha512-7Fbp9lQkuUnpTXS9vPbvT2FDYHuwJbvKPivOYETaVVSmcZKoczw6zcsebsARkH5Ged0f045YUOZnV/RuCzyLXQ==", + "dependencies": { + "howler": "^2.2.3", + "vue-demi": "latest" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^2.0.0 || >=3.0.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/sound/node_modules/vue-demi": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.0.tgz", + "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -3881,6 +3925,11 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "node_modules/howler": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.3.tgz", + "integrity": "sha512-QM0FFkw0LRX1PR8pNzJVAY25JhIWvbKMBFM4gqk+QdV+kPXOhleWGCB6AiAF/goGjIHK2e/nIElplvjQwhr0jg==" + }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", diff --git a/package.json b/package.json index caf7685..8ebb122 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@fortawesome/free-solid-svg-icons": "^6.4.0", "@fortawesome/vue-fontawesome": "^3.0.3", "@vueuse/core": "^10.1.2", + "@vueuse/sound": "^2.0.1", "pinia": "^2.0.35", "sass": "^1.62.1", "vue": "^3.2.47", diff --git a/src/assets/sounds/btn-hover.mp3 b/src/assets/sounds/btn-hover.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..240125a9834828205b639e6e05ac9092584e6108 GIT binary patch literal 4946 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 +import { useSound } from '@vueuse/sound' import { computed } from 'vue' +import buttonSfx from '@/assets/sounds/btn-hover.mp3' + +const { play, stop } = useSound(buttonSfx) + const props = defineProps<{ href?: string target?: string @@ -26,6 +31,9 @@ const elementTag = computed(() => (props.href ? 'a' : 'button')) v-bind="attributes" class="btn w-full p-1 px-2 text-left bg-y-beige-500 hover:shadow-md focus-visible:shadow-md" :class="{ active: isActive }" + @focus="play" + @mouseover="play" + @mouseleave="stop" >