当前位置:首页 > web实践 > 正文内容

今天吃什么

唐朝2年前 (2024-04-10)web实践1759

"今天吃什么"是一款极具趣味性的在线餐饮决策助手,旨在为面对琳琅满目美食选项而犹豫不决的用户,提供轻松愉快的随机推荐体验。该产品以简洁明快的网页界面呈现,只需轻点鼠标,即可在瞬间为用户揭晓今日餐单,让日常饮食选择变得简单又充满惊喜。

fixedimg.gif

所运用的知识点

1、使用document.querySelector()方法选取DOM元素,实现对页面中特定元素(如.title、.FixedMainBtn、.Item)的操作。

2、定义一个数组List,存储了大量的菜品名称,作为随机推荐的基础数据源。

3、为按钮绑定click事件监听器,通过匿名函数实现点击事件的响应处理。

4、使用Math.random()生成随机数,结合数组索引来实现从List中随机抽取菜品。

5、使用Math.ceil()、Math.random()等方法动态计算元素位置、颜色、字体大小等样式属性,增加视觉随机性。

6、使用setInterval()创建定时器,每隔一定时间(70毫秒)触发一次随机推荐操作。

7、使用classList.add()和classList.remove()方法动态添加/移除CSS类,实现动画效果。

8、使用setTimeout()设置延时操作,确保动画效果的流畅执行以及元素的适时清除。

操作步骤

1、构造HTML结构

使用!DOCTYPE html声明文档类型,并通过html:5的快捷代码创建HTML5的基础结,然后设置语言和标题。

<!DOCTYPE html>
<html lang="zh-Hans">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>今天吃什么</title>
    <link rel="stylesheet" href="https://www.ytwes.com/web/css/6-1.min.css">
</head>
<body>
    <!-- 容器元素,用于布局 "今天吃什么" 主题相关组件 -->
    <div class="song_4_04_10">
        <!-- 显示主题标题 -->
        <div class="title">今天吃什么?</div>
        <!-- 空容器元素,放置菜品 -->
        <div class="Item"></div>
        <!-- 固定按钮,用户点击后启动选择过程 -->
        <div class="FixedMainBtn">开始选</div>
        <!-- 插入固定图片,增强视觉效果 -->
        <div><img src="img/fixedimg.gif"></div>
    </div> 
</body>
</html>

2、获取和定义元素

// 初始化运行状态变量,初始值为0
let Run = 0;
// 获取页面《主题标题》的元素
const title = document.querySelector('.title');
// 获取页面《启动按钮》的元素
const FixedMainBtn = document.querySelector('.FixedMainBtn');
// 获取页面《放置菜品》的元素
const itemElement = document.querySelector('.Item');
// 定义一个数组,存储可供选择的食物名称
const List = ["酱烧饼", "香辣锅"];

3、添加按钮启动事件

// 为《启动按钮》元素添加点击事件监听器
FixedMainBtn.addEventListener("click", function (event) {
  // 如果当前运行状态为未运行(Run === 0)
  if (!Run) {
      // 更新标题文本为默认提示语
      title.innerHTML = "今天吃什么?";
      // 更新按钮文本为停止指令
      this.innerHTML = "给我停下来";
      //随机菜品
      // 更新运行状态为已运行(Run === 1)
    Run = 1;
  } else { // 如果当前运行状态为已运行(Run === 1)
      // 更新标题文本为确定提示语
    title.innerHTML = "就吃这个了";
    // 更新按钮文本为更换指令
    this.innerHTML = "换一个";
    //暂停菜品
    // 更新运行状态为未运行(Run === 0)
    Run = 0;
  }
}

4、随机菜品

Timer = setInterval(function () {

    // 随机选取食物列表中的一个食物
    const randomFood = List[Math.floor(Math.random() * List.length)];
    // 更新类名为"Item"的元素的文本内容为当前随机食物
    itemElement.innerHTML = randomFood;
    
    //丰富的随机特效
    
}, 70); // 结束定时器的匿名函数定义

5、暂停菜品

// 清除之前设置的定时器,停止食物元素的动态生成
clearInterval(Timer);

6、丰富随机特效

// 创建一个新的<div>元素,用于显示随机食物
const foodElement = document.createElement('div');
           
// 为新创建的元素设置类名为'random-food'
foodElement.className = 'random-food';
           
// 设置食物元素的文本内容为随机选取的食物名称
foodElement.textContent = randomFood;
           
// 随机设置食物元素的位置(top和left属性)
foodElement.style.top = Math.ceil(Math.random() * (window.innerHeight - 50)) + 'px';
foodElement.style.left = Math.ceil(Math.random() * (window.innerWidth - 50)) + 'px';
           
// 随机设置食物元素的文字颜色(alpha透明度渐变)
foodElement.style.color = `rgba(0, 0, 0, ${Math.random()})`;
           
// 随机设置食物元素的字体大小
foodElement.style.fontSize = Math.ceil(Math.random() * (22 - 12) + 12) + 'px';
           
// 将新创建的食物元素添加到文档<body>中
document.body.appendChild(foodElement);

           
// 使用setTimeout设置延时,在90毫秒后为食物元素添加类名'fade-out'以实现淡出效果
setTimeout(() => {
    foodElement.classList.add('fade-out');
}, 90);
           
// 使用setTimeout设置延时,在500毫秒后移除食物元素
setTimeout(() => {
    foodElement.remove();
}, 500);

7、完

效果演示

点击查看效果演示

    文档如有描述不清楚、错误或者过时的地方,欢迎留言指出。

    文档、教程内容会不定时更新,转载请标明原帖链接,以免让过时的教程流入网络。

    分享给朋友:

    “今天吃什么” 的相关文章

    团队介绍模块制作

    团队介绍模块制作

    以结构化、直观的方式展示团队成员的基本信息,包括头像、姓名、职务及简要工作经历等。后续可以通过设置链接,用户可以方便地访问成员的详细资料,增强了页面的信息传递效率和交互性。同时,模块设计兼顾了响应式布局,确保在各类设备上的良好用户体验。一、构造HTML结构使用!DOCTYPE html声明文档类型,...

    网站常见引用

    网站常见引用

    一、ico图标ico图标,又名favicon,即Favorites Icon的缩写,是指显示在浏览器收藏夹、地址栏和标签标题前面的个性化图标。上传一张图片,可以是ico格式。也可以是svg或png等格式。然后在页面引用这个图片在<head>模块引用方法,通常位于<title>...

    通过《通义灵码》生成想要的功能

    通过《通义灵码》生成想要的功能

    通义灵码(TONGYI Lingma)是一款强大的智能编码助手,能够帮助开发者在编写代码时提高效率和质量。要使用它来生成特定功能。我们来实现下下面的功能。功能:使用HTML5拖放API实现购物车拖放效果,如图所示:一、确认问题通义灵码目前是不支持发送图片的,我们需要把功能上没写,但图片上有的功能一并...

    h5网站添加统计代码

    1、进入百度统计官方网站 https://tongji.baidu.com/2、登录账户3、在控制面板界面,点击《使用配置》4、在《使用配置》左侧导航的《网站列表》界面,点击《添加站点》5、输入以下信息网站域名: 格式 b9b31053.idc.wod.xyz网站首页:格式&nb...

    虚拟主机安装zblog程序

    虚拟主机安装zblog程序

    本教程用于指导怎么通过虚拟主题全新安装一个zblogphp站点,数据库采用mysql。准备工作1、虚拟主机的程序语言是php,版本推荐选8.0以上版本,如没有8.0及其以上版本则选择当前最高的版本。2、虚拟主机有对应的mysql数据库信息。3、zblog的一键安装包。https://update.z...

    通过通义灵码制作一个简单的首页

    通过阿里的人工智能工具通义灵码的AI程序员制作一个简单的首页,包含顶部,导航,中间内容和底部4部分。具体要求顶部:HTML+CSS简易首页制作导航:首页、学习资料、作业演示、关于、联系作业演示设置二级下拉演示1、演示2、演示3中间内容:欢迎来到我们的网站这里是您的网站标语或者简介,突出展示关键信息。...