当前位置: 首页 > news >正文

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())操作

相关文章:

DeepSeek 助力 Vue 开发:打造丝滑的 键盘快捷键(Keyboard Shortcuts)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter19-表单脚本

十九、表单脚本 表单脚本 JavaScript 较早的一个用途是承担一部分服务器端表单处理的责任。虽然 Web 和 JavaScript 都已经发展了很多年&#xff0c;但 Web 表单的变化不是很大。由于不能直接使用表单解决问题&#xff0c;因此开发者不得不使用JavaScript 既做表单验证&#xf…...

如何使用深度学习进行手写数字识别(MNIST)

目录 手写数字识别(MNIST)1. 导入必要的库2. 加载和预处理数据3. 构建模型4. 编译模型5. 训练模型6. 评估模型7. 可视化训练过程(可选)代码说明运行环境总结当然可以!下面是一个使用Python和Keras(TensorFlow后端)实现的简单深度学习案例——手写数字识别(MNIST数据集)…...

【UCB CS 61B SP24】Lecture 5 - Lists 3: DLLists and Arrays学习笔记

本文内容为构建双向循环链表、使用 Java 的泛型将其优化为通用类型的链表以及数组的基本语法介绍。 1. 双向链表 回顾上一节课写的代码&#xff0c;当执行 addLast() 与 getLast() 方法时需要遍历链表&#xff0c;效率不高&#xff0c;因此可以添加一个指向链表末尾的索引&am…...

Unity Excel导表工具转Lua文件

思路介绍 借助EPPlus读取Excel文件中的配置数据&#xff0c;根据指定的不同类型的数据配置规则来解析成对应的代码文本&#xff0c;将解析出的字符串内容写入到XXX.lua.txt文件中即可 EPPlus常用API //命名空间 using OfficeOpenXml;//Excel文件路径 var fileExcel new File…...

kafka消费能力压测:使用官方工具

背景 在之前的业务场景中&#xff0c;我们发现Kafka的实际消费能力远低于预期。尽管我们使用了kafka-go组件并进行了相关测试&#xff0c;测试情况见《kafka-go:性能测试》这篇文章。但并未能准确找出消费能力低下的原因。 我们曾怀疑这可能是由我的电脑网络带宽问题或Kafka部…...

算法题(74):Pow(x,n)

审题&#xff1a; 需要我们计算出x&#xff08;double类型&#xff09;的n次幂&#xff0c;并返回 思路&#xff1a; 方法一&#xff1a;递归 &#xff08;1&#xff09;首先我们的n分为正和负&#xff0c;对于负的我们需要将n转为正的进行运算后&#xff0c;用1.0除以运算结果…...

windwos与linux环境下Iperf3带宽测试工具的安装、使用

目录 一、前言 二、windows 2.1下载 2.2安装 2.3使用 2.3.1服务端 2.3.2客户端 2.3.3输出内容 1.客户端 2.服务端 2.4.相关命令 三、linux 3.1安装 3.2使用 1.服务端 2.客户端 3.输出内容 1.客户端 2.服务端 一、前言 在数字化浪潮下&#xff0c;网络性能…...

GCC编译器(含预处理/编译/汇编/链接四阶段详解)

GCC编译器&#xff08;含预处理/编译/汇编/链接四阶段详解&#xff09; 1. 预处理阶段&#xff08;生成 .i 文件&#xff09;2. 编译阶段&#xff08;生成 .s 文件&#xff09;3. 汇编阶段&#xff08;生成 .o 文件&#xff09;4. 链接阶段&#xff08;生成可执行文件&#xff…...

20250221 NLP

1.向量和嵌入 https://zhuanlan.zhihu.com/p/634237861 encoder的输入就是向量&#xff0c;提前嵌入为向量 二.多模态文本嵌入向量过程 1.文本预处理 文本tokenizer之前需要预处理吗&#xff1f; 是的&#xff0c;文本tokenizer之前通常需要对文本进行预处理。预处理步骤可…...

Mac M3/M4 本地部署Deepseek并集成vscode

Mac 部署 使用傻瓜集成平台ollama&#xff0c;ollama平台依赖于docker&#xff0c;Mac的M3/M4 因doesn’t have VT-X/AMD-v enabled 所以VB,VM无法使用&#xff0c;导致docker无法启动&#xff0c;需要使用docker的替代品podman&#xff0c; 它完全兼容docker brew install p…...

flink使用demo

1、添加不同数据源 package com.baidu.keyue.deepsight.memory.test;import com.baidu.keyue.deepsight.memory.WordCount; import com.baidu.keyue.deepsight.memory.WordCountData; import org.apache.flink.api.common.RuntimeExecutionMode; import org.apache.flink.api.…...

目标检测中单阶段检测模型与双阶段检测模型详细对比与说明

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

简识Spring创建Bean方式和设计模式

一、理论解释&#xff1a; Spring在创建Bean时主要有四种方式&#xff0c;这些方式分别涉及到了不同的设计模式。以下是具体的创建方式及对应的设计模式&#xff1a; 通过反射调用构造方法创建Bean&#xff1a; 方式&#xff1a;在Spring的配置文件中&#xff0c;使用<bean…...

空字符串““、空白字符串“ “和 null 三者的区别

空字符串、空白字符串和 null 三者的区别表格&#xff1a; 类型定义示例长度是否有值空字符串字符串长度为 0&#xff0c;但不是 null&#xff0c;即存在一个有效的空字符串对象。""0有值&#xff08;空值&#xff09;空白字符串字符串包含空格、制表符等空白字符&a…...

agent和android怎么结合:健康助手,旅游助手,学习助手

agent和android怎么结合:健康助手,旅游助手,学习助手 创新点 智能交互创新:提出全新的agent - Android交互模式,如基于手势、语音、眼动等多模态融合的交互方式。例如让agent能够同时理解用户的语音指令和手势动作,在Android设备上提供更加自然和高效的交互体验,比如在…...

1.16作业

1 进注册界面&#xff0c;第一次以为抓包选把isadmin ture了就好 第二次尝试&#xff0c;勾选is admin&#xff0c;有需要invitecode&#xff08;经典&#xff09; 2 p r**5 r**4 - r**3 r**2 - r 2023 q r**5 - r**4 r**3 - r**2 r 2023 n 25066797992811602609904…...

上帝之眼——nmap

nmap介绍 Nmap&#xff08;网络映射器&#xff09;是一款广受欢迎的网络探测和安全评估工具&#xff0c;被誉为“上帝之眼”。它以其强大的扫描功能和广泛的应用场景&#xff0c;成为系统管理员和安全专家手中的得力助手。本文将对Nmap进行详细介绍&#xff0c;包括其优点、基本…...

6.日常英语笔记

It’s a pity that my English hasn’t improved much, and I’m not able to chat with you freely. lung 肺 pulmonary 医学中的肺部相关的 pulmonary disease 肺部疾病 pneumonia 肺炎 pulmonary inflammation 肺炎 stick on the wall 贴到墙上 paste on the wall faint w…...

工业路由器和工业交换机,打造高效稳定的工业网络?

工业路由器和工业交换机各有千秋&#xff0c;但如何将它们完美结合&#xff0c;构建稳定高效的工业网络&#xff1f;答案就在这里&#xff01; 工业物联网&#xff08;IIoT&#xff09;是高效、稳定的工业网络成为智慧工厂、工业自动化和远程监控等场景的基础支撑。工业路由器…...

[c++]--类和对象

目录 前言 一、类的定义 1.类定义格式 2.访问限定符 3.类域 二、实例化 1.实例化概念 2.对象大小 三、this指针 四、C和C语言实现Stack对比 五、类的默认成员函数 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值运算符重载 4.1.运算符重载 4.2.赋值运算符重载 5.取地址运算符重载…...

图论 之 迪斯科特拉算法求解最短路径

文章目录 题目743.网络延迟时间3341.到达最后一个房间的最少时间I 求解最短路径的问题&#xff0c;分为使用BFS和使用迪斯科特拉算法&#xff0c;这两种算法求解的范围是有区别的 BFS适合求解&#xff0c;边的权值都是1的图中的最短路径的问题 图论 之 BFS迪斯科特拉算法适合求…...

Linux中[root@localhost ~]#

root &#xff1a;当前登录用户 &#xff1a;分隔符 localhost &#xff1a;主机名。当前电脑的名字 ~&#xff1a;当前用户所在的位置 #&#xff1a;命令提示符&#xff0c;从这个位置开始可以输入命令 另一个提示符是$ 如果是 root &#xff0c;则提示&#xff03; 如果是普…...

DuodooBMS源码解读之 sale_delivery模块

发货通知单下载功能操作手册 一、功能概述 该代码实现了发货通知单的下载功能&#xff0c;用户可以选择要下载的发货通知单&#xff0c;系统将生成包含发货通知单详细信息的 Excel 文件供用户下载。 二、文件结构及说明 sale_delivery/controllers/download.py 定义了一个 …...

uniapp引入uview组件库(可以引用多个组件)

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

SpringCloud-Eureka初步使用

什么是REST是一组用于规范资源在网络中转移的表现形式软件架构设计风格.简单来说就是客户端和服务器之间的一种交互形式 什么是RESTful,满足了REST风格的接口或者程序,RESTful API是其中的接口,spring中提供了RestTemplate这个类,他强制执行了REST的规范,包括使用HTTP协议的状…...

【gitlab】认识 持续集成与部署

持续集成&#xff08;CI&#xff09;与持续部署&#xff08;CD&#xff09; 1. 什么是持续集成&#xff08;CI&#xff09;&#xff1f; 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;是一种软件开发实践&#xff0c;强调开发人员频繁地将代码提交到…...

机器学习,我们主要学习什么?

机器学习的发展历程 机器学习的发展历程&#xff0c;大致分为以下几个阶段&#xff1a; 1. 起源与早期探索&#xff08;20世纪40年代-60年代&#xff09; 1949年&#xff1a;Hebb提出了基于神经心理学的学习机制&#xff0c;开启了机器学习的先河1950年代&#xff1a;机器学习的…...

React 高阶组件的优缺点

React 高阶组件的优缺点 优点 1. 代码复用性高 公共逻辑封装&#xff1a;当多个组件需要实现相同的功能或逻辑时&#xff0c;高阶组件可以将这些逻辑封装起来&#xff0c;避免代码重复。例如&#xff0c;多个组件都需要在挂载时进行数据获取操作&#xff0c;就可以创建一个数…...

算法1-4 数楼梯

题目描述 楼梯有 N 阶&#xff0c;上楼可以一步上一阶&#xff0c;也可以一步上二阶。 编一个程序&#xff0c;计算共有多少种不同的走法。 输入格式 一个数字&#xff0c;楼梯数。 输出格式 输出走的方式总数。 输入输出样例 输入 #1 4 输出 #1 5 说明/提示 对于…...

我的世界1.20.1forge开发教程(6)——自定义燃料,熔炼规则、配方

配方篇 在Minecraft中,配方代码是用于定义合成配方的一种数据格式。在开发者的角度,配方代码通常以JSON格式编写,包含了合成所需的原料、合成产物以及合成方式等信息。 在1.12版本之前,开发者需要通过修改游戏的源代码来添加自定义配方。这通常需要对游戏的Java代码进行修…...

推荐几款SpringBoot项目手脚架

作为程序员、一般需要搭建项目手脚架时、都会去Gitee或Github上去找、但是由于Github在国内并不稳定、所以就只能去Gitee去上查找。 不同语言检索方式不一样、但是也类似。 Gitee WEB应用开发 / 后台管理框架 芋道源码 ELADMIN 后台管理系统 一个基于 Spring Boot 2.7.1…...

01 1个路由器+两个子网

前言 这是最近一个朋友的 ensp 相关的问题, 这里来大致了解一下 ensp, 计算机网络拓扑 相关基础知识 这里一系列文章, 主要是参照了这位博主的 ensp 专栏 这里 我只是做了一个记录, 自己实际操作了一遍, 增强了一些 自己的理解 当然 这里仅仅是一个 简单的示例, 实际场景…...

buu-[OGeek2019]babyrop-好久不见41

打开 /dev/urandom 设备文件&#xff0c;读取4个字节到 buf 中。 将 buf 传递给 sub_804871F() 函数&#xff0c;该函数似乎对输入进行某种处理并返回一个值 v2。 最后&#xff0c;将 v2 传递给 sub_80487D0() 函数。 这个函数首先将 a1 转换为字符串 s。 然后从标准输入读…...

PV和UV的区别

文章目录 1. UV&#xff08;Unique Visitor / 独立访客&#xff09;&#xff1a;多少人来过2. PV&#xff08;Page View / 页面浏览量&#xff09;&#xff1a;访问了多少次3. 对比 UV 和 PV4. 示例场景5. 扩展指标 UV 侧重用户规模&#xff0c;反映“多少人来过”。PV 侧重访问…...

DeepSeek掘金——调用DeepSeek API接口 实现智能数据挖掘与分析

调用DeepSeek API接口:实现智能数据挖掘与分析 在当今数据驱动的时代,企业和开发者越来越依赖高效的数据挖掘与分析工具来获取有价值的洞察。DeepSeek作为一款先进的智能数据挖掘平台,提供了强大的API接口,帮助用户轻松集成其功能到自己的应用中。本文将详细介绍如何调用D…...

JavaScript变量的作用域介绍

JavaScript变量的作用域介绍 JavaScript 变量的作用域决定了变量在代码中的可访问性。 var 是 JavaScript 中最早用于声明变量的关键字&#xff0c;它函数作用域或全局作用域。 let 关键字&#xff0c;具有块级作用域、全局作用域。 const关键字&#xff0c;具有块级作用域…...

ollama如何安全卸载,解决Ollama unins000.msg is missing

春节后在本地电脑安装了Ollama的客户端&#xff0c;每次开机自启&#xff0c;影响开机速度&#xff0c;而且本地的模型不如联网的回答效果好&#xff0c;果断选择了卸载&#xff0c;但是今天卸载发现提示下方的错误。根据此文章可以解决当前的问题。 根据此文章可以解决当前的…...

2.5GE 超千兆SFP光模块型号(常用光模块收发光功率范围)

SFP 2.5GE超千兆光模&#xff0c;参考表格&#xff1a; 型号类型工作波长 (nm)发光功率 (dBm)光功率灵敏度 (dBm)传输距离 (m)SFP-25G-SR多模光纤850-10.0 to -3.0-18.0300 (OM3) / 400 (OM4)SFP-25G-LR单模光纤1310-5.0 to 1.0-24.010,000SFP-25G-ER单模光纤1550-1.0 to 4.0…...

Ubuntu24.04安装不同版本的pip

目录 1.安装pip 2. 为不同的Python版本安装pip 3. 安装python库 1.安装pip 一般情况下&#xff0c;Ubuntu系统默认提供Python 3&#xff0c;但可能没有安装pip。可以通过以下命令安装pip sudo apt update sudo apt install python3-pip 安装完成后&#xff0c;可以通过以下…...

fastadmin实现海报批量生成、邮件批量发送

记录一个海报批量生成、邮件批量发送功能开发&#xff0c;业务场景如下&#xff1a; 国外客户做观展预登记&#xff0c;工作人员通过后台&#xff0c;批量给这些观众生成入场证件并发送到观众登记的邮箱&#xff0c;以方便观众入场时快速进场。证件信息包含入场二维码、姓名&a…...

拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!

2025年2月19日 知名博主Dwarkesh Patel对话微软CEO萨蒂亚纳德拉 在最新访谈释放重磅信号&#xff1a;AI将掀起工业革命级增长&#xff0c;量子计算突破引爆材料科学革命&#xff0c;游戏引擎进化为世界模拟器。 整个视频梳理出几大核心观点&#xff0c;揭示科技巨头的未来十年…...

深度学习(2)-深度学习关键网络架构

关键网络架构 深度学习有4种类型的网络架构&#xff1a;密集连接网络、卷积神经网络、循环神经网络和Transformer。每种类型的模型都是针对特定的输入模式&#xff0c;网络架构包含了关于数据结构的假设&#xff0c;即模型搜索的假设空间。某种架构能否解决某个问题&#xff0…...

MyBatis中的日志和映射器说明

1.MyBatis中的日志 1.1 什么是日志 ​ 在我们编写应用的时候&#xff0c;有一些信息需要及时查看&#xff0c;查看的时候有时需要输出到控制台&#xff0c;有时需要输出到文件。MyBatis也需要日志&#xff0c;一般情况下&#xff0c;使用log4j进行日志管理。 1.2 在MyBatis中…...

pip下载速度变快可以用清华镜像源

pip下载速度变快可以用清华镜像源 https://pypi.tuna.tsinghua.edu.cn/simplepip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple参考清华镜像源地址&#xff08;国内下载python包必备地址&#xff09;_清华源镜像地址-CSDN博客...

骶骨神经

骶骨肿瘤手术后遗症是什么_39健康网_癌症 [健康之路]匠心仁术&#xff08;七&#xff09; 勇闯禁区 骶骨肿瘤切除术...

LeetCode刷题---二分查找---441

排列硬币 441. 排列硬币 - 力扣&#xff08;LeetCode&#xff09; 题目 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算…...

DeepSeek 提示词:定义、作用、分类与设计原则

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

最短路的方案数+打印路径

这个题目整合了我们最短路用到的很多技能 如何统计最短路径的方案数呢&#xff0c;这就需要我们另外开一个全局数组 如何打印路径呢&#xff0c;还是开一个全局的数组&#xff0c;记录前一个是啥就行 简单的来说&#xff0c;要增加啥新的功能&#xff0c;直接多开全局变量就行…...

Python爬虫系列教程之第十三篇:构建高可用爬虫系统 —— 混合架构与自动化监控

大家好&#xff0c;欢迎继续关注本系列爬虫教程&#xff01;随着爬虫项目规模的不断扩大和业务需求的提升&#xff0c;单一技术方案往往难以满足实际应用中对高可用性、稳定性和自动化监控的要求。如何构建一个既能应对多种反爬策略&#xff0c;又能在异常情况下自动恢复、实时…...