diff --git a/src/components.d.ts b/src/components.d.ts
index 3bfe0ae..5232b92 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -17,6 +17,7 @@ declare module '@vue/runtime-core' {
RouterView: typeof import('vue-router')['RouterView']
StapleTag: typeof import('./components/tags/StapleTag.vue')['default']
Switch: typeof import('./components/Switch.vue')['default']
+ ToggleMode: typeof import('./components/ToggleMode.vue')['default']
ToolTag: typeof import('./components/tags/ToolTag.vue')['default']
VegetableTag: typeof import('./components/tags/VegetableTag.vue')['default']
}
diff --git a/src/components/ChooseFood.vue b/src/components/ChooseFood.vue
index eae5714..2ba9440 100644
--- a/src/components/ChooseFood.vue
+++ b/src/components/ChooseFood.vue
@@ -1,8 +1,6 @@
+
+
+
+
+
+
diff --git a/src/composables/animation.ts b/src/composables/animation.ts
new file mode 100644
index 0000000..24d8448
--- /dev/null
+++ b/src/composables/animation.ts
@@ -0,0 +1,42 @@
+import { isClient } from '@vueuse/core'
+import type { Ref } from 'vue'
+
+export function useEmojiAnimation(recipeBtn: Ref) {
+ const { x, y } = usePointer()
+ const { top, left } = useElementBounding(recipeBtn)
+
+ const playAnimation = (emoji: string) => {
+ if (!isClient)
+ return
+
+ // 单个 Vue 组件实现不适合创建多个元素和清除动画
+ const emojiEl = document.createElement('span')
+ emojiEl.style.position = 'fixed'
+ emojiEl.style.left = `${x.value}px`
+ emojiEl.style.top = `${y.value}px`
+ emojiEl.style.zIndex = '10'
+ emojiEl.style.transition = 'left .4s linear, top .4s cubic-bezier(0.5, -0.5, 1, 1)'
+ emojiEl.textContent = emoji
+ document.body.appendChild(emojiEl)
+
+ setTimeout(() => {
+ // 以防万一,按钮位置没检测出来,就不播放动画了
+ if (!top.value || !left.value) {
+ emojiEl.style.top = `${x.value}px`
+ emojiEl.style.left = `${y.value}px`
+ }
+ else {
+ emojiEl.style.top = `${top.value}px`
+ emojiEl.style.left = `${left.value + 12}px`
+ }
+ }, 1)
+
+ emojiEl.ontransitionend = () => {
+ emojiEl.remove()
+ }
+ }
+
+ return {
+ playAnimation,
+ }
+}
diff --git a/src/stores/recipe.ts b/src/stores/recipe.ts
index 3d2fa81..bcf743e 100644
--- a/src/stores/recipe.ts
+++ b/src/stores/recipe.ts
@@ -4,12 +4,12 @@ const namespace = 'cook'
/**
* survival: 生存模式
+ * strict: 严格
+ * loose: 模糊
*/
-type CookMode = 'survival' | ''
+export type SearchMode = 'survival' | 'loose' | 'strict'
export const useRecipeStore = defineStore('recipe', () => {
- const strict = useStorage(`${namespace}:strict`, false)
-
const curStuff = useStorage(`${namespace}:stuff`, new Set())
// const curTools = ref(new Set())
const curTool = useStorage(`${namespace}:tool`, '')
@@ -18,7 +18,7 @@ export const useRecipeStore = defineStore('recipe', () => {
// const selectedTools = computed(() => Array.from(curTools.value))
// const selectedTools = ref('')
- const mode = ref('')
+ const curMode = useStorage(`${namespace}:mode`, 'loose')
function toggleStuff(name: string) {
if (!curStuff)
@@ -40,6 +40,10 @@ export const useRecipeStore = defineStore('recipe', () => {
// curTools.value.add(name)
}
+ function setMode(mode: SearchMode) {
+ curMode.value = mode
+ }
+
/**
* 重置
*/
@@ -50,12 +54,14 @@ export const useRecipeStore = defineStore('recipe', () => {
}
return {
- strict,
curTool,
+ curMode,
selectedStuff,
+
toggleStuff,
toggleTools,
reset,
+ setMode,
}
})