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

今天吃什么

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

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

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、完

效果演示

点击查看效果演示

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

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

    分享给朋友:

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

    倒计时跳转URL

    倒计时跳转URL

    倒计时跳转URL 是一种常见的网页交互技术,它允许网页在设定的时间结束后自动导航至另一个预设的URL地址。这种技术常见于网页广告展示、用户操作提示、页面过渡等待等情况。开发步骤1、初始化HTML基础框架使用!DOCTYPE html声明文档类型,并通过html:5的快捷代码创建HTML5的基础结,然...

    Banner需求提交界面

    Banner需求提交界面

    背景图加表单文本居中1、构造HTML结构使用!DOCTYPE html声明文档类型,并通过html:5的快捷代码创建HTML5的基础结,然后设置语言和标题。<!DOCTYPE html> <html lang="zh-Hans">...

    团队介绍模块制作

    团队介绍模块制作

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

    h5网站添加统计代码

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

    zblog搭建微信小程序

    zblog搭建微信小程序

    本教程适用于《zblog微信小程序1.1.8》版本。zblog微信小程序是基于zblog后端进行搭建的小程序,依赖zblog微信小程序插件,使用前请在应用商店下载安装zblog微信小程序插件。准备工作:1、确保自己的域名有正常开启https;2、自己的zblog网站后台有正常安装下载《zblog微信...

    如何在zblog网站引用第三方视频

    如何在zblog网站引用第三方视频

    启用插件后,在文章编辑页面右侧栏中找到“添加 iframe 视频”按钮,点击后弹出对话框,在对话框中粘贴复制好的 iframe 代码,选择要展示的宽高比例、以及是否进行 HTML5 格式化,点击“插入”即可。如果无法预览视频,请到设置中添加对应的 CSP 域名。展示宽高比例是指 iframe 的宽高...