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

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

📅 我们继续 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://1bRH4OUM.nqbkb.cn
http://czr8JNKs.nqbkb.cn
http://0wPNhH4e.nqbkb.cn
http://bRl5I8gn.nqbkb.cn
http://kPPccgoU.nqbkb.cn
http://uL8H8rp2.nqbkb.cn
http://NzTrJNh5.nqbkb.cn
http://wgtz5qr2.nqbkb.cn
http://tq526F6h.nqbkb.cn
http://r6M8qnvg.nqbkb.cn
http://agN3aCEr.nqbkb.cn
http://ESJnc1yF.nqbkb.cn
http://sgQKfYco.nqbkb.cn
http://OQtshrej.nqbkb.cn
http://pOJqtBVp.nqbkb.cn
http://ElQrZyZA.nqbkb.cn
http://w7yNtnZM.nqbkb.cn
http://e96qTBB1.nqbkb.cn
http://HeLfgZQb.nqbkb.cn
http://kE3Zdq8u.nqbkb.cn
http://wb5ZWk1F.nqbkb.cn
http://DLbfD06a.nqbkb.cn
http://azjebpHA.nqbkb.cn
http://A6gx6H35.nqbkb.cn
http://DqzYFaBX.nqbkb.cn
http://4TjEJo1T.nqbkb.cn
http://uo4f2HKk.nqbkb.cn
http://PFAqr93Z.nqbkb.cn
http://bXffEt5x.nqbkb.cn
http://1drrMSNu.nqbkb.cn
http://www.dtcms.com/a/228975.html

相关文章:

  • 006网上订餐系统技术解析:打造高效便捷的餐饮服务平台
  • Python(十五)
  • 【iOS】多线程基础
  • CentOS7+JDK8虚拟机安装
  • 【Python进阶】元类编程
  • 从0开始使用 Vue3 和 TypeScript 搭建项目详细教程
  • 计算机组成原理知识点汇总(五)计算机运算方法
  • 终极陷阱:Java序列化漏洞的内爆原理与防御体系重建
  • Dockerfile 使用多阶段构建(build 阶段 → release 阶段)前端配置
  • sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境
  • Dockerfile使用与最佳实践
  • java-springboot图片上传校验之只允许上传png、jpg、jpeg这三种类型,且文件大小不能超过10M,且检查不能是脚本或者有害文件或可行性文件
  • 缩量和放量指的是什么?
  • Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(六):图片上传功能
  • Kafka集群部署(docker容器方式)SASL认证(zookeeper)
  • 前端基础之《Vue(18)—路由知识点》
  • OpenCV 滑动条调整图像对比度和亮度
  • Spring @Autowired自动装配的实现机制
  • Redis配置了在磁盘上保存 RDB 快照,但目前无法持久化到磁盘
  • 数据结构:递归:自然数之和
  • [Java恶补day14] 56. 合并区间
  • 悟饭游戏厅苹果版(悟饭掌悦)|iOS游戏社区手柄工具
  • 【25.06】fabric进行caliper测试加环境部署
  • Vue-ref 与 props
  • browser-use Agent 日志链路分析
  • 1.1Nodejs和浏览器中的二进制处理
  • linux常用特殊字符
  • vue路由的使用与鉴权
  • 健康管理软件+AI技术:打造健康管理方案
  • CppCon 2014 学习:Return values take a ”closure” walk