DeepSeek 助力 Vue 開發:打造絲滑的 鍵盤快捷鍵(Keyboard Shortcuts)

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏+關注哦 💕

共同探索軟件研發!敬請關注【寶碼香車】
關注描述

csdngif標識

目錄

  • DeepSeek 助力 Vue 開發:打造絲滑的 鍵盤快捷鍵(Keyboard Shortcuts)
    • 📚前言
    • 📚頁面效果
    • 📚指令輸入
      • 屬性定義
        • 1. 快捷鍵綁定數組 `shortcuts`
        • 2. 啟用狀態 `enabled`
        • 3. 全局監聽 `global`
        • 4. 組合鍵分隔符 `separator`
        • 5. 修飾鍵順序敏感 `modifierSensitive`
      • 事件定義
        • 1. `shortcut-triggered` 事件
        • 2. `shortcut-failed` 事件
      • 其他
        • 1. 快捷鍵驗證
        • 2. 沖突處理
        • 3. 跨平臺兼容性
        • 4. 文檔和示例
        • 5. 測試
      • 📘組件代碼
    • 📚代碼測試
    • 📚添加參數后主要代碼
      • 📘組件 \src\views\KeyboardShortcutsView.vue
    • 📚測試代碼正常跑通,附其他基本代碼
      • 📘編寫路由 src\router\index.js
      • 📘編寫展示入口 src\App.vue
    • 📚頁面效果
    • 📚相關文章


📚📗📕📘📖🕮💡📝🗂???🛠?💻🚀🎉🏗?🌐🖼?🔗📊👉🔖??🌟🔐??·正文開始??·🎥😊🎓📩😺🌈🤝🤖📜📋🔍?🧰?📄📢📈 🙋0??1??2??3??4??5??6??7??8??9??🔟🆗*??#??

DeepSeek 助力 Vue 開發:打造絲滑的 鍵盤快捷鍵(Keyboard Shortcuts)

📚前言

在日常工作中,DeepSeek 也為許多用戶帶來了便利。一位市場營銷經理在策劃一場新產品推廣活動時,利用 DeepSeek 進行市場分析和競品研究。DeepSeek 通過對大量市場數據和消費者反饋的分析,為他提供了詳細的市場趨勢報告和競品優劣勢分析。基于這些分析結果,他制定了更有針對性的推廣策略,成功提高了新產品的市場知名度和銷量。他說:“DeepSeek 幫助我做出了更明智的決策,讓我的工作變得更加高效和輕松。

📚頁面效果

頁面效果

📚指令輸入

已經創建好了一個基于Vue3的組合式API的項目(Composition API),并能正常運行起來,請幫我用 Vue3的組合式API(Composition API) 生成一個 鍵盤快捷鍵(Keyboard Shortcuts) 的功能組件,所有代碼都保存在components/KeyboardShortcuts 下的文件夾中。功能組件的script標簽中只有setup屬性,使用普通 JavaScript 實現,不使用TypeScript。
功能要有,如下屬性:

屬性定義

1. 快捷鍵綁定數組 shortcuts
  • 類型:數組
  • 描述:用于定義一組快捷鍵及其對應的回調函數或動作標識。數組中的每個元素可以是一個對象,包含快捷鍵組合和對應的處理邏輯。例如,[{ keys: 'Ctrl + S', action: 'save' }, { keys: 'Ctrl + C', action: 'copy' }]
2. 啟用狀態 enabled
  • 類型:布爾值
  • 描述:控制快捷鍵組件是否啟用。當設置為 false 時,快捷鍵將不會觸發任何動作,可用于臨時禁用快捷鍵功能。
3. 全局監聽 global
  • 類型:布爾值
  • 描述:指定快捷鍵是否在全局范圍內監聽。如果設置為 true,則無論焦點在哪個元素上,快捷鍵都會生效;如果設置為 false,則只有當焦點在組件內部時快捷鍵才會生效。
4. 組合鍵分隔符 separator
  • 類型:字符串
  • 描述:用于指定快捷鍵組合中各個鍵之間的分隔符,默認為 +。例如,用戶可以自定義為 -,則快捷鍵定義可以寫成 Ctrl - S
5. 修飾鍵順序敏感 modifierSensitive
  • 類型:布爾值
  • 描述:指定修飾鍵(如 CtrlAltShift)的順序是否敏感。如果設置為 true,則 Ctrl + Shift + AShift + Ctrl + A 被視為不同的快捷鍵;如果設置為 false,則它們被視為相同的快捷鍵。

事件定義

1. shortcut-triggered 事件
  • 描述:當用戶按下定義的快捷鍵時觸發該事件,事件參數包含觸發的快捷鍵組合和對應的動作標識。例如,當用戶按下 Ctrl + S 時,會觸發該事件,并傳遞 { keys: 'Ctrl + S', action: 'save' } 作為參數。
2. shortcut-failed 事件
  • 描述:當用戶按下的鍵組合未匹配到任何定義的快捷鍵時觸發該事件,事件參數包含用戶按下的鍵組合。可用于記錄用戶的無效操作或提供提示信息。

其他

1. 快捷鍵驗證

在組件內部對用戶定義的快捷鍵進行驗證,確保其格式正確,避免因無效的快捷鍵定義導致組件出錯。例如,檢查快捷鍵組合中是否包含非法字符或不支持的鍵。

2. 沖突處理

當多個快捷鍵之間存在沖突時,提供相應的處理機制。可以選擇忽略沖突,只觸發第一個匹配的快捷鍵;也可以拋出錯誤或警告,提示用戶存在沖突。

3. 跨平臺兼容性

考慮不同操作系統和瀏覽器對快捷鍵的支持情況,確保組件在各種環境下都能正常工作。例如,在 Mac 系統中,Ctrl 鍵通常對應 Command 鍵,需要進行相應的轉換。

4. 文檔和示例

提供詳細的文檔和示例,說明組件的使用方法、屬性和事件的含義,方便其他開發者使用該組件。

5. 測試

編寫單元測試和集成測試,確保組件的功能正常,快捷鍵能夠正確觸發和處理。測試用例應覆蓋各種情況,包括不同的快捷鍵組合、啟用和禁用狀態等。

你有更好的建議也可以添加,要注明。組件定義好后給出5個及以上的調用示例。
下面是現有目錄
vueAndDeepseek/
├── src/ # 源代碼目錄
│ ├── assets/ # 靜態資源
│ │ ├── base.css
│ │ ├── main.css
│ │ └── logo.svg
│ ├── components/ # 組件目錄
│ │ ├── HelloWorld.vue
│ │ ├── TheWelcome.vue
│ │ ├── WelcomeItem.vue
│ │ ├── Progress/
│ │ │ └── Progress.vue
│ │ ├── Accordion/
│ │ ├── BackToTop/
│ │ ├── Card/
│ │ ├── InfiniteScroll/
│ │ ├── Notification/
│ │ ├── Timeline/
│ │ ├── Switch/
│ │ ├── Tabs/
│ │ ├── Sidebar/
│ │ ├── Breadcrumbs/
│ │ ├── MasonryLayout/
│ │ ├── Rating/
│ │ ├── ColorPicker/
│ │ ├── RightClickMenu/
│ │ ├── RangePicker/
│ │ ├── Navbar/
│ │ ├── FormValidation/
│ │ ├── CopyToClipboard/
│ │ ├── ClickAnimations/
│ │ ├── ThumbnailList/
│ │ ├── KeyboardShortcuts/
│ │ ├── DatePicker/
│ │ └── icons/
│ ├── router/ # 路由配置
│ │ └── index.js
│ ├── stores/ # Pinia 狀態管理
│ │ └── counter.js
│ ├── views/ # 頁面組件
│ │ ├── ProgressView.vue
│ │ ├── TabsView.vue
│ │ ├── SwitchView.vue
│ │ ├── TimelineView.vue
│ │ ├── NotificationView.vue
│ │ ├── CardView.vue
│ │ ├── InfiniteScrollView.vue
│ │ ├── BackToTopView.vue
│ │ ├── AccordionView.vue
│ │ ├── SidebarView.vue
│ │ ├── BreadcrumbsView.vue
│ │ ├── MasonryLayoutView.vue
│ │ ├── RatingView.vue
│ │ ├── ColorPickerView.vue
│ │ ├── RightClickMenuView.vue
│ │ ├── RangePickerView.vue
│ │ ├── NavbarView.vue
│ │ ├── FormValidationView.vue
│ │ ├── CopyToClipboardView.vue
│ │ ├── ClickAnimationsView.vue
│ │ ├── ThumbnailListView.vue
│ │ ├── KeyboardShortcutsView.vue
│ │ ├── DatePickerView.vue
│ │ └── AboutView.vue
│ ├── App.vue # 根組件
│ └── main.js # 應用入口
├── public/ # 公共資源目錄
├── index.html # HTML 模板
├── package.json # 項目配置
├── vite.config.js # Vite 配置
└── node_modules/ # 依賴包目錄

📘組件代碼

根據你的需求,我幫你創建了一個功能完善的鍵盤快捷鍵組件,以下是實現代碼和調用示例:

<!-- components/KeyboardShortcuts/KeyboardShortcuts.vue -->
<template><div ref="root"><slot></slot></div>
</template><script setup>
import { ref, computed, watch, onMounted, onUnmounted } from 'vue'const props = defineProps({shortcuts: {type: Array,required: true,validator: (value) => value.every(item => item.keys && item.action)},enabled: {type: Boolean,default: true},global: {type: Boolean,default: false},separator: {type: String,default: '+'},modifierSensitive: {type: Boolean,default: false}
})const emit = defineEmits(['shortcut-triggered', 'shortcut-failed'])const root = ref(null)
const isMac = /macintosh|mac os x/i.test(navigator.userAgent)
let currentTarget = null
let isListening = falseconst keyAliases = {ctrl: 'control',control: 'control',cmd: 'meta',command: 'meta',meta: 'meta',shift: 'shift',alt: 'alt',option: 'alt',esc: 'escape',space: ' ',up: 'arrowup',down: 'arrowdown',left: 'arrowleft',right: 'arrowright'
}const normalizeKey = (key) => {const lowerKey = key.toLowerCase()return keyAliases[lowerKey] || lowerKey
}const parseKeys = (keysStr) => {return keysStr.split(props.separator).map(k => normalizeKey(k.trim())).map(k => isMac && k === 'control' ? 'meta' : k)
}const normalizeCombo = (keys, isModifierSensitive) => {const modifiers = []const others = []keys.forEach(key => {if (['control', 'meta', 'shift', 'alt'].includes(key)) {modifiers.push(key)} else {others.push(key)}})if (!isModifierSensitive) {modifiers.sort()}return [...modifiers, ...others].join('+')
}const shortcutMap = computed(() => {const map = new Map()props.shortcuts.forEach(shortcut => {try {const keys = parseKeys(shortcut.keys)const combo = normalizeCombo(keys, props.modifierSensitive)if (map.has(combo)) {console.warn(`Shortcut conflict: ${shortcut.keys} conflicts with existing shortcut`)}map.set(combo, shortcut)} catch (e) {console.error(`Invalid shortcut: ${shortcut.keys}`, e)}})return map
})const handleKeyDown = (event) => {if (!props.enabled) returnconst pressedModifiers = []if (event.ctrlKey) pressedModifiers.push('control')if (event.shiftKey) pressedModifiers.push('shift')if (event.altKey) pressedModifiers.push('alt')if (event.metaKey) pressedModifiers.push('meta')const key = normalizeKey(event.key)if (['control', 'shift', 'alt', 'meta'].includes(key)) returnconst pressedKeys = [...pressedModifiers, key]const combo = normalizeCombo(pressedKeys, props.modifierSensitive)const matched = shortcutMap.value.get(combo)if (matched) {event.preventDefault()emit('shortcut-triggered', { keys: matched.keys, action: matched.action })if (typeof matched.action === 'function') {matched.action()}} else {const userCombo = pressedKeys.join(props.separator)emit('shortcut-failed', { keys: userCombo })}
}const updateEventListener = () => {if (isListening) {currentTarget.removeEventListener('keydown', handleKeyDown)isListening = false}if (props.enabled) {currentTarget = props.global ? window : root.valueif (currentTarget) {currentTarget.addEventListener('keydown', handleKeyDown)isListening = true}}
}onMounted(updateEventListener)
onUnmounted(() => {if (isListening) {currentTarget.removeEventListener('keydown', handleKeyDown)}
})watch([() => props.enabled, () => props.global], updateEventListener)
</script>

以下是5個調用示例:

<!-- 示例1: 基本使用 -->
<KeyboardShortcuts:shortcuts="[{ keys: 'Ctrl + S', action: 'save' },{ keys: 'Ctrl + C', action: 'copy' }]"@shortcut-triggered="handleShortcut"
/><!-- 示例2: 帶回調函數 -->
<KeyboardShortcuts:shortcuts="[{ keys: 'Ctrl + K', action: () => openSearch() }]"
/><!-- 示例3: 非全局作用域 -->
<KeyboardShortcuts:global="false":shortcuts="[{ keys: 'Enter', action: 'submit' }]"
><input type="text" placeholder="Focus here to use Enter shortcut">
</KeyboardShortcuts><!-- 示例4: 自定義分隔符 -->
<KeyboardShortcuts:separator="'-'":shortcuts="[{ keys: 'Ctrl - Alt - D', action: 'debug' }]"
/><!-- 示例5: 復雜組合 -->
<KeyboardShortcuts:modifier-sensitive="true":shortcuts="[{ keys: 'Shift + Ctrl + Tab', action: 'prevTab' },{ keys: 'Ctrl + Tab', action: 'nextTab' }]"
/><!-- 示例6: 禁用狀態 -->
<KeyboardShortcuts:enabled="false":shortcuts="[...]"
/>

組件特性:

  1. 自動處理Mac系統的Command鍵映射
  2. 支持修飾鍵順序敏感設置
  3. 完善的類型驗證和錯誤提示
  4. 自動處理事件監聽的生命周期
  5. 支持組合鍵和單鍵觸發
  6. 詳細的調試信息輸出

使用時可以根據需要組合不同的屬性來實現各種快捷鍵場景,組件會自動處理瀏覽器兼容性和平臺差異。

📚代碼測試

運行正常。代碼示例需要添加一些參數。

📚添加參數后主要代碼

📘組件 \src\views\KeyboardShortcutsView.vue

<template><div class="keyboard-shortcuts-demo"><h2>鍵盤快捷鍵示例</h2><!-- 示例1: 基本使用 --><section class="demo-section"><h3>基本使用</h3><div class="demo-box"><p>嘗試按下: <code>Ctrl + S 保存</code><code>Ctrl + C 復制</code></p><KeyboardShortcuts:shortcuts="[{ keys: 'Ctrl + S', action: 'save' },{ keys: 'Ctrl + C', action: 'copy' }]"@shortcut-triggered="handleShortcut"><div class="action-log">最后執行的操作: {{ lastAction }}</div></KeyboardShortcuts></div></section><!-- 示例2: 帶回調函數 --><section class="demo-section"><h3>帶回調函數</h3><div class="demo-box"><p>嘗試按下: <code>Ctrl + K</code></p><KeyboardShortcuts:shortcuts="[{keys: 'Ctrl + K',action: () => openSearch()}]"><div class="search-box" v-if="isSearchOpen">搜索框已打開<button @click="isSearchOpen = false">關閉</button></div></KeyboardShortcuts></div></section><!-- 示例3: 非全局作用域 --><section class="demo-section"><h3>非全局作用域</h3><div class="demo-box"><p>在輸入框內按 <code>Enter</code></p><KeyboardShortcuts:global="false":shortcuts="[{ keys: 'Enter', action: 'submit' }]"@shortcut-triggered="handleSubmit"><inputtype="text"v-model="inputText"placeholder="Focus here to use Enter shortcut"class="demo-input"><div class="action-log">{{ submitMessage }}</div></KeyboardShortcuts></div></section><!-- 示例4: 自定義分隔符 --><section class="demo-section"><h3>自定義分隔符</h3><div class="demo-box"><p>嘗試按下: <code>Ctrl-Alt-D</code></p><KeyboardShortcutsseparator="-":shortcuts="[{ keys: 'Ctrl-Alt-D', action: 'debug' }]"@shortcut-triggered="handleDebug"><div class="action-log">{{ debugStatus }}</div></KeyboardShortcuts></div></section><!-- 示例5: 復雜組合 --><section class="demo-section"><h3>復雜組合</h3><div class="demo-box"><p>嘗試按下: <code>Shift + Ctrl + Tab</code><code>Ctrl + Tab</code></p><KeyboardShortcuts:modifier-sensitive="true":shortcuts="[{ keys: 'Shift + Ctrl + Tab', action: 'prevTab' },{ keys: 'Ctrl + Tab', action: 'nextTab' }]"@shortcut-triggered="handleTabSwitch"><div class="tabs-demo">當前標簽頁: {{ currentTab }}</div></KeyboardShortcuts></div></section></div>
</template><script setup>
import { ref } from 'vue'
import KeyboardShortcuts from '@/components/KeyboardShortcuts/KeyboardShortcuts.vue'// 狀態變量
const lastAction = ref('')
const isSearchOpen = ref(false)
const inputText = ref('')
const submitMessage = ref('')
const debugStatus = ref('')
const currentTab = ref(1)// 事件處理函數
const handleShortcut = (event) => {lastAction.value = `執行了 ${event.action} 操作`
}const openSearch = () => {isSearchOpen.value = true
}const handleSubmit = () => {submitMessage.value = `提交的內容: ${inputText.value}`inputText.value = ''
}const handleDebug = () => {debugStatus.value = '調試模式已' + (debugStatus.value.includes('開啟') ? '關閉' : '開啟')
}const handleTabSwitch = (event) => {if (event.action === 'nextTab') {currentTab.value = currentTab.value >= 3 ? 1 : currentTab.value + 1} else {currentTab.value = currentTab.value <= 1 ? 3 : currentTab.value - 1}
}
</script><style scoped>
.keyboard-shortcuts-demo {padding: 20px;max-width: 800px;margin: 0 auto;
}h2 {color: #2c3e50;text-align: center;margin-bottom: 30px;
}.demo-section {margin-bottom: 30px;padding: 20px;border: 1px solid #ebeef5;border-radius: 8px;background: white;
}h3 {color: #2c3e50;margin-bottom: 15px;
}.demo-box {padding: 15px;background: #f8f9fa;border-radius: 6px;
}code {background: #e9ecef;padding: 2px 6px;border-radius: 4px;font-family: monospace;
}.action-log {margin-top: 10px;padding: 10px;background: #e9ecef;border-radius: 4px;font-size: 14px;
}.demo-input {width: 100%;padding: 8px;border: 1px solid #dcdfe6;border-radius: 4px;margin-top: 10px;
}.search-box {margin-top: 10px;padding: 10px;background: #e9ecef;border-radius: 4px;display: flex;justify-content: space-between;align-items: center;
}.search-box button {padding: 4px 8px;border: none;background: #409eff;color: white;border-radius: 4px;cursor: pointer;
}.tabs-demo {margin-top: 10px;padding: 10px;background: #e9ecef;border-radius: 4px;text-align: center;
}
</style>

📚測試代碼正常跑通,附其他基本代碼

  • 添加路由
  • 頁面展示入口

📘編寫路由 src\router\index.js

\router\index.js

import { createRouter, createWebHistory } from 'vue-router'
import RightClickMenuView from '../views/RightClickMenuView.vue'
import RangePickerView from '../views/RangePickerView.vue'const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'progress',component:  () => import('../views/ProgressView.vue'),},{path: '/tabs',name: 'tabs',// route level code-splitting// this generates a separate chunk (About.[hash].js) for this route// which is lazy-loaded when the route is visited.// 標簽頁(Tabs)component: () => import('../views/TabsView.vue'),},{path: '/accordion',name: 'accordion',// 折疊面板(Accordion)component: () => import('../views/AccordionView.vue'),},{path: '/timeline',name: 'timeline',// 時間線(Timeline)component: () => import('../views/TimelineView.vue'),},{path: '/backToTop',name: 'backToTop',component: () => import('../views/BackToTopView.vue')},{path: '/notification',name: 'notification',component: () => import('../views/NotificationView.vue')},{path: '/card',name: 'card',component: () => import('../views/CardView.vue')},{path: '/infiniteScroll',name: 'infiniteScroll',component: () => import('../views/InfiniteScrollView.vue')},{path: '/switch',name: 'switch',component: () => import('../views/SwitchView.vue')},{path: '/sidebar',name: 'sidebar',component: () => import('../views/SidebarView.vue')},{path: '/breadcrumbs',name: 'breadcrumbs',component: () => import('../views/BreadcrumbsView.vue')},{path: '/masonryLayout',name: 'masonryLayout',component: () => import('../views/MasonryLayoutView.vue')},{path: '/rating',name: 'rating',component: () => import('../views/RatingView.vue')},{path: '/datePicker',name: 'datePicker',component: () => import('../views/DatePickerView.vue')},{path: '/colorPicker',name: 'colorPicker',component: () => import('../views/ColorPickerView.vue')},{path: '/rightClickMenu',name: 'rightClickMenu',component: RightClickMenuView},{path: '/rangePicker',name: 'rangePicker',component: () => import('../views/RangePickerView.vue')},{path: '/navbar',name: 'navbar',component: () => import('../views/NavbarView.vue')},{path: '/formValidation',name: 'formValidation',component: () => import('../views/FormValidationView.vue')},{path: '/copyToClipboard',name: 'copyToClipboard',component: () => import('../views/CopyToClipboardView.vue')},{path: '/clickAnimations',name: 'clickAnimations',component: () => import('../views/ClickAnimationsView.vue')},{path: '/thumbnailList',name: 'thumbnailList',component: () => import('../views/ThumbnailListView.vue')},{path: '/keyboardShortcuts',name: 'keyboardShortcuts',component: () => import('../views/KeyboardShortcutsView.vue')}],
})export default router

📘編寫展示入口 src\App.vue

 src\App.vue

<script setup>
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
</script><template><header><img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" /><div class="wrapper"><HelloWorld msg="You did it!" /><nav><RouterLink to="/">Progress</RouterLink><RouterLink to="/tabs">Tabs</RouterLink><RouterLink to="/accordion">Accordion</RouterLink><RouterLink to="/timeline">Timeline</RouterLink><RouterLink to="/backToTop">BackToTop</RouterLink><RouterLink to="/notification">Notification</RouterLink><RouterLink to="/card">Card</RouterLink><RouterLink to="/infiniteScroll">InfiniteScroll</RouterLink><RouterLink to="/switch">Switch</RouterLink><RouterLink to="/sidebar">Sidebar</RouterLink><RouterLink to="/breadcrumbs">Breadcrumbs</RouterLink><RouterLink to="/masonryLayout">MasonryLayout</RouterLink><RouterLink to="/rating">Rating</RouterLink><RouterLink to="/datePicker">DatePicker</RouterLink><RouterLink to="/colorPicker">ColorPicker</RouterLink><RouterLink to="/rightClickMenu">RightClickMenu</RouterLink><RouterLink to="/rangePicker">RangePicker</RouterLink><RouterLink to="/navbar">Navbar</RouterLink><RouterLink to="/formValidation">FormValidation</RouterLink><RouterLink to="/copyToClipboard">CopyToClipboard</RouterLink><RouterLink to="/clickAnimations">ClickAnimations</RouterLink><RouterLink to="/thumbnailList">ThumbnailList</RouterLink><RouterLink to="/keyboardShortcuts">KeyboardShortcuts</RouterLink></nav></div></header><RouterView />
</template><style scoped>
header {line-height: 1.5;max-height: 100vh;
}.logo {display: block;margin: 0 auto 2rem;
}nav {width: 100%;font-size: 12px;text-align: center;margin-top: 2rem;
}nav a.router-link-exact-active {color: var(--color-text);
}nav a.router-link-exact-active:hover {background-color: transparent;
}nav a {display: inline-block;padding: 0 1rem;border-left: 1px solid var(--color-border);
}nav a:first-of-type {border: 0;
}@media (min-width: 1024px) {header {display: flex;place-items: center;padding-right: calc(var(--section-gap) / 2);}.logo {margin: 0 2rem 0 0;}header .wrapper {display: flex;place-items: flex-start;flex-wrap: wrap;}nav {text-align: left;margin-left: -1rem;font-size: 1rem;padding: 1rem 0;margin-top: 1rem;}
}
</style>

📚頁面效果

頁面效果

📚相關文章

?

———— 相 關 文 章 ————

?

  1. 0基礎3步部署自己的DeepSeek安裝步驟

  2. DeepSeek 助力 Vue 開發:打造絲滑的步驟條(Step bar)https://blog.csdn.net/qq_33650655/article/details/145560497

  3. DeepSeek 助力 Vue 開發:打造絲滑的進度條(Progress Bar)https://blog.csdn.net/qq_33650655/article/details/145577034

  4. 自己部署 DeepSeek 助力 Vue 開發:打造絲滑的標簽頁(Tabs)https://blog.csdn.net/qq_33650655/article/details/145587999

  5. 自己部署 DeepSeek 助力 Vue 開發:打造絲滑的折疊面板(Accordion)https://blog.csdn.net/qq_33650655/article/details/145590404

  6. 自己部署 DeepSeek 助力 Vue 開發:打造絲滑的時間線(Timeline )https://blog.csdn.net/qq_33650655/article/details/145597372

  7. DeepSeek 助力 Vue 開發:打造絲滑的返回頂部按鈕(Back to Top)https://blog.csdn.net/qq_33650655/article/details/145615550

  8. DeepSeek 助力 Vue 開發:打造絲滑的通知欄(Notification Bar)https://blog.csdn.net/qq_33650655/article/details/145620055

  9. DeepSeek 助力 Vue 開發:打造絲滑的卡片(Card)https://blog.csdn.net/qq_33650655/article/details/145634564

  10. DeepSeek 助力 Vue 開發:打造絲滑的無限滾動(Infinite Scroll)https://blog.csdn.net/qq_33650655/article/details/145638452

  11. DeepSeek 助力 Vue 開發:打造絲滑的開關切換(Switch)https://blog.csdn.net/qq_33650655/article/details/145644151

  12. DeepSeek 助力 Vue 開發:打造絲滑的側邊欄(Sidebar)https://blog.csdn.net/qq_33650655/article/details/145654204

  13. DeepSeek 助力 Vue 開發:打造絲滑的面包屑導航(Breadcrumbs)https://blog.csdn.net/qq_33650655/article/details/145656895

  14. DeepSeek 助力 Vue 開發:打造絲滑的瀑布流布局(Masonry Layout)https://blog.csdn.net/qq_33650655/article/details/145663699

  15. DeepSeek 助力 Vue 開發:打造絲滑的評分組件(Rating)https://blog.csdn.net/qq_33650655/article/details/145664576

  16. DeepSeek 助力 Vue 開發:打造絲滑的日期選擇器(Date Picker),未使用第三方插件 https://blog.csdn.net/qq_33650655/article/details/145673279

  17. DeepSeek 助力 Vue 開發:打造絲滑的顏色選擇器(Color Picker)https://blog.csdn.net/qq_33650655/article/details/145689522

  18. DeepSeek 助力 Vue 開發:打造絲滑的右鍵菜單(RightClickMenu)https://blog.csdn.net/qq_33650655/article/details/145706658

  19. DeepSeek 助力 Vue 開發:打造絲滑的范圍選擇器(Range Picker)https://blog.csdn.net/qq_33650655/article/details/145713572

  20. DeepSeek 助力 Vue 開發:打造絲滑的導航欄(Navbar)https://blog.csdn.net/qq_33650655/article/details/145732421

  21. DeepSeek 助力 Vue 開發:打造絲滑的表單驗證(Form Validation)https://blog.csdn.net/qq_33650655/article/details/145735582

  22. DeepSeek 助力 Vue 開發:打造絲滑的復制到剪貼板(Copy to Clipboard)https://blog.csdn.net/qq_33650655/article/details/145739569

  23. DeepSeek 助力 Vue 開發:打造絲滑的點擊動畫(Click Animations)https://blog.csdn.net/qq_33650655/article/details/145766184

  24. DeepSeek 助力 Vue 開發:打造絲滑的縮略圖列表(Thumbnail List)https://blog.csdn.net/qq_33650655/article/details/145776679

到此這篇文章就介紹到這了,更多精彩內容請關注本人以前的文章或繼續瀏覽下面的文章,創作不易,如果能幫助到大家,希望大家多多支持寶碼香車~💕,若轉載本文,一定注明本文鏈接。


整理不易,點贊關注寶碼香車

更多專欄訂閱推薦:
👍 html+css+js 絢麗效果
💕 vue
?? Electron
?? js
📝 字符串
?? 時間對象(Date())操作

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896090.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniapp引入uview組件庫(可以引用多個組件)

第一步安裝 npm install uview-ui2.0.31 第二步更新uview npm update uview-ui 第三步在main.js中引入uview組件庫 第四步在uni.scss中引入import "uview-ui/theme.scss"樣式 第五步在文件中使用組件

Jmeter進階篇(34)如何解決jmeter.save.saveservice.timestamp_format=ms報錯?

問題描述 今天使用Jmeter完成壓測執行,然后使用命令將jtl文件轉換成html報告時,遇到了報錯! 大致就是說jmeter里定義了一個jmeter.save.saveservice.timestamp_format=ms的時間格式,但是jtl文件中的時間格式不是標準的這個ms格式,導致無法正常解析。對于這個問題,有如下…

React 低代碼項目:網絡請求與問卷基礎實現

&#x1f35e;吐司問卷&#xff1a;網絡請求與問卷基礎實現 Date: February 10, 2025 Log 技術要點&#xff1a; HTTP協議XMLHttpRequest、fetch、axiosmock.js、postmanWebpack devServer 代理、craco.js 擴展 webpackRestful API 開發要點&#xff1a; 搭建 mock 服務 …

安裝海康威視相機SDK后,catkin_make其他項目時,出現“libusb_set_option”錯誤的解決方法

硬件&#xff1a;雷神MIX G139H047LD 工控機 系統&#xff1a;ubuntu20.04 之前運行某項目時&#xff0c;處于正常狀態。后來由于要使用海康威視工業相機&#xff08;型號&#xff1a;MV-CA013-21UC&#xff09;&#xff0c;便下載了并安裝了該相機的SDK&#xff0c;之后運行…

人工智能之自動駕駛技術體系

自動駕駛技術體系 自動駕駛技術是人工智能在交通領域的重要應用&#xff0c;旨在通過計算機視覺、傳感器融合、路徑規劃等技術實現車輛的自主駕駛。自動駕駛不僅能夠提高交通效率&#xff0c;還能減少交通事故和環境污染。本文將深入探討自動駕駛的技術體系&#xff0c;包括感…

淺談模組-相機鬼像

一&#xff0e;前言 在成像中&#xff0c;我們常常會遇到肉眼觀測的真實世界中&#xff0c;不存在的異常光影出現在畫面中&#xff0c;并伴有各種顏色&#xff0c;我們將這個物體稱為鬼像。某些鬼像可能會對圖像產生美感的體驗&#xff0c;但是大多數的鬼像都會對圖像的質量以…

vmware虛擬機Ubuntu Desktop系統怎么和我的電腦相互復制文件、內容

1、先安裝vmware workstation 17 player&#xff0c;然后再安裝Ubuntu Desktop虛擬機&#xff0c;然后再安裝vmware tools&#xff0c;具體可以參考如下視頻&#xff1a; VMware虛擬機與主機實現文件共享&#xff0c;其實一點也不難_嗶哩嗶哩_bilibili 2、本人親自試過了&…

Spring Boot項目中解決跨域問題(四種方式)

目錄 一&#xff0c;跨域產生的原因二&#xff0c;什么情況下算跨域三&#xff0c;實際演示四&#xff0c;解決跨域的方法 1&#xff0c;CrossOrigin注解2&#xff0c;添加全局過濾器3&#xff0c;實現WebMvcConfigurer4&#xff0c;Nginx解決跨域5&#xff0c;注意 開發項目…

Oracle JDK、Open JDK zulu下載地址

一、Oracle JDK https://www.oracle.com/java/technologies/downloads/ 剛進去是最新的版本&#xff0c;往下滑可以看到老版本 二、Open JDK的 Azul Zulu https://www.azul.com/downloads/ 直接可以選版本等選項卡

軟件測試:1、單元測試

1. 單元測試的基本概念 單元&#xff08;Unit&#xff09;&#xff1a;軟件系統的基本組成單位&#xff0c;可以是函數、模塊、方法或類。 單元測試&#xff08;Unit Testing&#xff09;&#xff1a;對軟件單元進行的測試&#xff0c;驗證代碼的正確性、規范性、安全性和性能…

Leetcode.264 丑數 II

題目鏈接 Leetcode.264 丑數 II mid 題目描述 給你一個整數 n n n &#xff0c;請你找出并返回第 n n n 個 丑數 。 丑數 就是質因子只包含 2 2 2、 3 3 3 和 5 5 5 的正整數。 示例1&#xff1a; 輸入&#xff1a;n 10 輸出&#xff1a;12 解釋&#xff1a;[1, 2, 3,…

瑞芯微RV1126部署YOLOv8全流程:環境搭建、pt-onnx-rknn模型轉換、C++推理代碼、錯誤解決、優化、交叉編譯第三方庫

目錄 1 環境搭建 2 交叉編譯opencv 3 模型訓練 4 模型轉換 4.1 pt模型轉onnx模型 4.2 onnx模型轉rknn模型 4.2.1 安裝rknn-toolkit 4.2.2 onn轉成rknn模型 5 升級npu驅動 6 C++推理源碼demo 6.1 原版demo 6.2 增加opencv讀取圖片的代碼 7 交叉編譯x264 ffmepg和op…

【Python爬蟲(32)】從單飛 to 團戰:Python多線程爬蟲進化史

【Python爬蟲】專欄簡介&#xff1a;本專欄是 Python 爬蟲領域的集大成之作&#xff0c;共 100 章節。從 Python 基礎語法、爬蟲入門知識講起&#xff0c;深入探討反爬蟲、多線程、分布式等進階技術。以大量實例為支撐&#xff0c;覆蓋網頁、圖片、音頻等各類數據爬取&#xff…

C#初級教程(1)——C# 與.NET 框架:探索微軟平臺編程的強大組合

圖片來源&#xff1a; https://www.lvhang.site/docs/dotnettimeline 即夢AI - 一站式AI創作平臺 一、歷史發展脈絡 在早期的微軟平臺編程中&#xff0c;常用的編程語言有 Visual Basic、C、C。到了 20 世紀 90 年代末&#xff0c;Win32 API、MFC&#xff08;Microsoft Found…

【接口封裝】——13、登錄窗口的標題欄內容設置

解釋&#xff1a; 1、封裝內容&#xff1a;圖標、文本內容、寬度 2、ui.iconLabel&#xff1a;在UI文件中的自定義命名 3、引入頭文件&#xff1a;#include<qpixmap.h> 函數定義&#xff1a; #pragma once#include <QWidget> #include "ui_TitleBar.h"cl…

DeepSeek全生態接入指南:官方通道+三大云平臺

DeepSeek全生態接入指南&#xff1a;官方通道三大云平臺 一、官方資源入口 1.1 核心交互平臺 &#x1f5a5;? DeepSeek官網&#xff1a; https://chat.deepseek.com/ &#xff08;體驗最新對話模型能力&#xff09; 二、客戶端工具 OllamaChatboxCherry StudioAnythingLLM …

web安全:跨站請求偽造 (CSRF)

跨站請求偽造 (CSRF) ? 跨站請求偽造&#xff08;CSRF&#xff0c;Cross-Site Request Forgery&#xff09; 是一種網絡攻擊方式&#xff0c;攻擊者誘使受害者在未經其授權的情況下執行特定操作。CSRF 利用受害者已登錄的身份和瀏覽器自動發送的認證信息&#xff08;如 Cooki…

前端ES面試題及參考答案

目錄 let/const 與 var 的區別?TDZ 是什么? 箭頭函數與普通函數的區別?箭頭函數能否作為構造函數? 模板字符串的嵌套表達式和標簽模板用法? 解構賦值的應用場景及對象 / 數組解構差異? 函數參數默認值的生效條件及暫時性死區問題? 展開運算符(...)在數組 / 對象中…

Windows 圖形顯示驅動開發-查詢 WDDM(3.2) 功能支持和啟用

查詢 Windows 顯示驅動程序模型 (WDDM) 功能的支持和啟用。 其中介紹了&#xff1a; 用戶模式和內核模式顯示驅動程序&#xff08;UMD 和 KMD&#xff09;如何查詢 OS&#xff0c;以確定 WDDM 功能在系統上是否受支持和已啟用。 OS 如何確定驅動程序是否支持特定的 WDDM 功能…

MySQL InnoDB 存儲引擎的索引詳解

在 MySQL 中&#xff0c;InnoDB 是最常用的存儲引擎&#xff0c;它支持事務、行級鎖和外鍵約束等功能&#xff0c;而索引則是提升數據庫查詢性能的關鍵。在 InnoDB 存儲引擎中&#xff0c;索引不僅僅是提高查詢速度的工具&#xff0c;還是數據庫的核心組成部分之一。本文將詳細…