50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Dad Jokes(冷笑话卡片)

article/2025/6/8 13:01:21

📅 我们继续 50 个小项目挑战!—— DadJokes 组件

  • 仓库地址:https://github.com/SunACong/50-vue-projects

  • 项目预览地址:https://50-vue-projects.vercel.app/

在这里插入图片描述

豆包翻译确实可以,冷笑话应该属于各类语言比较难理解的风格,这里豆包自动解析出了其中的含义。确实不错!!!


😂 组件目标

构建一个轻量有趣的“Dad Jokes”组件,点击按钮即可获取一个随机冷笑话,用于放松心情、提升用户体验,也适合嵌入仪表盘或侧边栏作为互动装饰组件。

🛠️ 技术实现点

  • 使用 Vue3 的 <script setup> 写法,逻辑清晰简洁。
  • 使用 fetch 请求公开 API(https://icanhazdadjoke.com)。
  • 使用 TailwindCSS 快速搭建居中卡片样式,提升视觉层次感。
  • 使用响应式变量 ref 和基础的异步请求逻辑。

🧱 组件实现

<template><div class="flex h-screen items-center justify-center"><div class="flex w-xl flex-col items-center justify-center gap-20 rounded-2xl bg-white p-8"><h3 class="text-xl font-bold text-gray-600">Don't Laugh Challenge</h3><div id="joke" class="text-2xl">{{ joke }}</div><button class="btn bg-blue-500 hover:bg-blue-300" @click="getJoke">Get Another Joke</button></div></div>
</template>

🤖 API 说明

<script setup>
import { ref } from 'vue'const joke = ref('')async function getJoke() {const config = {headers: {Accept: 'application/json',},}try {const response = await fetch('https://icanhazdadjoke.com', config)const data = await response.json()joke.value = data.joke} catch (error) {console.error('Error fetching joke:', error)joke.value = 'Failed to load joke. Try again!'}
}// 初始化时获取第一个笑话
getJoke()
</script>
  • https://icanhazdadjoke.com

    • 免费公开的 dad joke API。
    • 通过设置 Accept: application/json 头即可返回 JSON 格式。

💡 用户交互亮点

  • 初次进入页面即展示一个冷笑话,避免“空白页面”冷场。
  • 每次点击按钮即可刷新笑话,交互直接。
  • 响应式变量自动更新视图,无需刷新页面。

🎨 TailwindCSS 样式重点

类名说明
flex items-center justify-center实现页面居中对齐
w-xl p-8 rounded-2xl bg-white卡片容器样式,居中圆角白底
text-xl font-bold text-gray-600标题样式
text-2xl笑话正文文字
bg-blue-500 hover:bg-blue-300按钮颜色及悬停状态

🧾 常量定义 + 组件路由建议

constants/index.js 添加组件预览常量:

export const projectList = [
{id: 10,title: 'Dad Jokes',image: 'https://50projects50days.com/img/projects-img/10-dad-jokes.png',link: 'DadJokes',},
]

router/index.js 中添加路由选项:

{path: '/DadJokes',name: 'DadJokes',component: () => import('@/projects/DadJokes.vue'),},

🧾总结

此组件非常适合嵌入到:

  • 🎯 仪表盘(Dashboard):增加轻松氛围
  • 🧩 首页右栏 / 抽屉组件:作为彩蛋趣味功能
  • 👨‍💻 项目加载页:等待时读笑话减压


👉 下一篇,我们将完成 EventKeyCodes组件,一个可以显示用户按下的键盘按键信息!🚀


http://www.hkcw.cn/article/RBGaRyIxlq.shtml

相关文章

ESP32开发之LED闪烁和呼吸的实现

硬件电路介绍GPIO输出模式GPIO配置过程闪烁灯的源码LED PWM的控制器(LEDC)概述LEDC配置过程及现象整体流程 硬件电路介绍 电路图如下&#xff1a; 只要有硬件基础的应该都知道上图中&#xff0c;当GPIO4的输出电平为高时&#xff0c;LED灯亮&#xff0c;反之则熄灭。如果每间…

【办公类-48-04】202506每月电子屏台账汇总成docx-5(问卷星下载5月范围内容,自动获取excel文件名,并转移处理)

背景需求&#xff1a; 1-4月电子屏表格&#xff0c;都是用这个代码将EXCEL数据整理成分类成3个WORD表格。 【办公类-48-04】20250118每月电子屏台账汇总成docx-4&#xff08;提取EXCLE里面1月份的内容&#xff0c;自制月份文件夹&#xff09;-CSDN博客文章浏览阅读1.2k次&…

25年宁德时代新能源科技SHL 测评语言理解数字推理Verify题库

宁德时代新能源科技的SHL测评中&#xff0c;语言理解部分主要考察阅读理解、逻辑填空和语句排序等题型&#xff0c;要求应聘者在17分钟内完成30题。阅读理解需要快速捕捉文章主旨和理解细节信息&#xff1b;逻辑填空则要根据语句逻辑填入最合适的词汇&#xff1b;语句排序是将打…

Windows下WSL(Ubuntu)安装1Panel

1Panel 1Panel 提供了一个直观的 Web 界面和 MCP Server&#xff0c;帮助用户轻松管理 Linux 服务器中的网站、文件、容器、数据库以及大型语言模型&#xff08;LLMs&#xff09;。 官网地址&#xff1a;1Panel - 现代化、开源的 Linux 服务器运维管理面板 - 官网 前置条件 …

virtualbox安装扩展工具以支持共享文件夹

1.下载扩展镜像 https://download.virtualbox.org/virtualbox/7.0.16/ 2.加载扩展镜像并安装 3. 配置共享文件夹

实现仿中国婚博会微信小程序

主要功能&#xff1a; 1、完成底部标签导航设计、首页海报轮播效果设计和宫格导航设计&#xff0c;如图1所示 2、在首页里&#xff0c;单击全部分类宫格导航的时候&#xff0c;会进入到全部分类导航界面&#xff0c;把婚博会相关内容的导航集成到一个界面里&#xff0c;如图2…

Meta ASC广告:智能电商营销利器解析

Meta推出的ASC广告&#xff08;全称Advantage Shopping Campaign&#xff09;是专为电商卖家打造的智能营销利器。作为新一代自动化购物广告解决方案&#xff0c;它通过AI技术重塑了传统广告投放模式&#xff0c;为商家带来更高效的转化路径。 五大核心优势解析&#xff1a; 全…

1.1Nodejs和浏览器中的二进制处理

Buffer 在 Node.js 中&#xff0c;Buffer 类用于处理二进制数据。由于 JavaScript 在浏览器环境中主要用于处理字符串和数字等类型的数据&#xff0c;对二进制数据的处理能力较弱&#xff0c;因此 Node.js 引入了 Buffer 类来弥补这一不足&#xff0c;特别是在处理文件系统操作…

redis的哨兵模式和Redis cluster

目录 一. redis的主从复制 二. 哨兵模式 2.1 定义 2.2 作用 2.3 配置实例 三. Redis cluster 3.1 定义 3.2 作用 3.3 配置实例 1. 新建集群文件目录 2. 准备可执行文件到每个文件夹 3. 开启群集功能 4. 启动redis节点 5. 查看是否启动成功 6. 启动集群 7. 测试…

[Java 基础]打印金字塔

实现一个 Java 程序&#xff0c;让用户输入金字塔的层数&#xff0c;打印出对应层数的金字塔。 比如&#xff0c;如果用户指定金字塔的层数是 5&#xff0c;那么将会打印如下的金字塔&#xff1a; 0000* 000*** 00***** 0******* 假如 i 代表的是行&#xff0c;i 从 1 开始…

ollama的安装及加速下载技巧

下载ollama ollama的安装可以从官网下载&#xff0c;地址&#xff1a; https://ollama.com 但是下载会很慢&#xff0c;我是去的这里下载&#xff1a;https://www.gy328.com/app/ollama/ 和官网一样。 下载好了&#xff0c;点击安装&#xff0c;安装好了&#xff…

Qiskit:量子计算模拟器

参考文献&#xff1a; IBM Qiskit 官网Qiskit DocumentationQiskit Benchpress packageQiskit Algorithms package量子计算&#xff1a;基本概念常见的几类矩阵&#xff08;正交矩阵、酉矩阵、正规矩阵等&#xff09;Qiskit 安装指南-博客园使用Python实现量子电路模拟&#x…

05 APP 自动化- Appium 单点触控 多点触控

文章目录 一、单点触控查看指针的指针位置实现手势密码&#xff1a; 二、多点触控 一、单点触控 查看指针的指针位置 方便查看手势密码-九宫格每个点的坐标 实现手势密码&#xff1a; 执行手势操作&#xff1a; 按压起点 -> 移动到下一点 -> 依次移动 -> 释放&am…

aardio 图像识别

今天终于学会了编程中的 OCR 技术&#xff01;原来计算机真的能识别图片里的文字&#xff0c;这种让程序 "看懂" 图像的能力太神奇了&#xff0c;赶紧把学习过程记录下来。 一、初识OCR&#xff1a;让程序读懂图片文字 &#xff08;一&#xff09;简单识别实验 OC…

【北邮 操作系统】第十二章 文件系统实现

一、文件的物理结构 1.1 文件块、磁盘块 类似于内存分页&#xff0c;磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中&#xff0c;磁盘块的大小与内存块、页面的大小相同 内存与磁盘之间的数据交换(即读/写操作、磁盘I/0)都是以“块”为单位进行的。即…

VS2022下C++ Boost库安装与使用使用

一.Boost概述 1.简介 Boost 是一个广泛使用的 C 库集合&#xff0c;提供了许多高质量、可移植、高效的工具和组件&#xff0c;被视为 C 标准库的延伸。自 1998 年成立以来&#xff0c;Boost 已成为 C 社区的核心资源&#xff0c;许多 Boost 库通过实践验证后被纳入 C 标准&am…

Unity-UI组件详解

今天我们来学习Unity的UI的详解&#xff0c;这部分的内容相对较少&#xff0c;对于程序员来说主要的工作是负责将各种格式的图片呈现在显示器上并允许操作这些图片。 本篇帖子的理论依据依然是官方开源的UGUI代码&#xff0c;网址为&#xff1a;GitHub - Unity-Technologies/u…

化工厂爆炸事件看制造业AI转型

一、事件警示&#xff1a;化工制造安全风险不容忽视 近日&#xff0c;某化学有限公司发生事故。涉事工厂主体工程建设有2座硝化装置区&#xff0c;1座加氢装置区&#xff0c;均属于危险工艺生产装置。硝化反应通常属于强放热反应&#xff0c;原料及产物具有爆炸危险性&#xf…

Ubuntu系统安装与配置NTP时间同步服务

Ubuntu系统安装与配置NTP时间同步服务 一、NTP服务介绍NTP服务简介工作原理系统环境准备检查当前时间状态二、方案选择:systemd-timesyncd vs ntpd三、使用systemd-timesyncd时间同步1. 方案介绍2. 配置优化3. 应用配置4. 验证状态5. 检查当前时间状态6. 查看当前实践四、使用…

【小红书】API接口,获取笔记核心数据

小红书笔记核心数据API接口详解 - 深圳小于科技提供专业数据服务 深圳小于科技&#xff08;官网&#xff1a;https://www.szlessthan.com&#xff09;推出的小红书笔记核心数据API接口&#xff0c;为开发者提供精准的笔记互动数据分析能力&#xff0c;助力内容运营与商业决策。…