H5前端开发——BOM

news2024/11/7 22:34:21

H5前端开发——BOM

BOM(Browser Object Model)是指浏览器对象模型,它提供了一组对象和方法,用于与浏览器窗口进行交互。

通过 BOM 对象,开发人员可以操作浏览器窗口的行为和状态,实现与用户的交互和数据传输等功能。在前端开发中,熟练运用 BOM 提供的对象和方法可以更好地控制和优化用户体验。
下面介绍两个案列了解一下:

  1. (设计题)
    使用setTimeout()和setInterval()设计随机点名系统(系统一和系统二分别使用两种方法即可,具体哪个系统使用哪种方法不做限制)。

随机点名系统一:

页面中有若干个名字(全部展示)和一个按钮,实现以下功能。

(1)单击“点名”按钮,按钮的文本设置为“停止”,不停的随机改变一个名字的背景色,其余名字的背景色为初始值。

(2)单击“停止”按钮,按钮的文本设置为“点名”,随机改变一个名字的背景色变色,其余名字的背景色为初始值。

在这里插入图片描述
随机点名系统二:

页面中有若干个名字(但是只显示也1个名字)和一个按钮,实现以下功能。

(1)单击“点名”按钮,按钮的文本设置为“停止”,不停的随机改变名字。

(2)单击“停止”按钮,按钮的文本设置为“点名”,名字选定。

参考效果(可根据自己需求改进,只要实现功能即可)

初始状态:
在这里插入图片描述
随机点名系统一完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>随机点名系统</title>
    <style>
       #container { width: 1200px; text-align: center;margin: 0 auto; }
       #box { width: 1200px; height: 160px; margin: 40px; clear: both; }
       #btn { width: 100px; height: 30px; }
       .name { width: 100px; height: 30px; float: left; background-color: antiquewhite; margin-left: 10px; margin-top: 10px; text-align: center; line-height: 30px; }
       .highlight { background-color: red; }
       h1 { text-align: center; }
    </style>
</head>
<body>
    <div id="container">
        <h1>随机点名系统</h1>
        <div class="box" id="box"></div>
        <input type="button" id="btn" value="点名"/>
    </div>

<script>
   var boxNode = document.getElementById('box');
   var btn = document.getElementById('btn');
   var names = document.getElementsByClassName('name');

   // 创建姓名数组
   var arrs = ["姓名1", "Theshy", "jackelove", "baolan", "rookie", "ning", "zitai", "crisp", "369", "letme"];

   for(let i = 0; i < arrs.length; i++) {
    // 把名字写入div里面
    var divNode = document.createElement('div');
    divNode.className = "name";
    divNode.innerHTML = arrs[i];
    boxNode.appendChild(divNode);
   }

   var timeID;

   // 点名事件
   btn.onclick = function() {
    if(btn.value == '点名') {
        // 计时器,点名函数
        timeID = setInterval(dm, 100);
        btn.value = '停止';
    }
    else {
        // 清除计时器
        clearInterval(timeID)
        btn.value = '点名';



        // 找到有红色背景的名字,移除红色背景
        var highlightedName = document.querySelector('.highlight');
        if (highlightedName) {
            highlightedName.classList.remove('highlight');
        }

        // 随机选取一个名字,添加红色背景
        var random = Math.floor(Math.random() * arrs.length);
        names[random].classList.add('highlight');

    }
   }

   // 点名函数
   function dm() {
    // 清空已经选中的姓名背景色,恢复默认值
    for(let i = 0; i < names.length; i++) {
      if(names[i].classList.contains('highlight')) {
        names[i].classList.remove('highlight');
      }
    }
    
    // 随机获取一个名字,添加红色背景
    var random = parseInt(Math.random() * arrs.length);
    names[random].classList.add('highlight');
   }
       
</script>
</body>
</html>

在这里插入图片描述

代码解析:
这段代码实现了一个随机点名系统的功能,具体解析如下:

  1. HTML部分:
  • 创建一个id为"container"的div容器,并设置一个标题"h1"、一个空的盒子"box"和一个按钮"btn"。
  • 样式部分定义了"box"、"name"和"h1"的样式。
  1. JavaScript部分:
  • 获取页面中的元素节点,并将它们保存在变量中。
  • 创建一个包含姓名的数组"arrs",里面存放了一些姓名。
  • 使用循环遍历"arrs"数组,在"box"中创建一个新的div,设置div的class为"name",将每个姓名添加到div中,然后将这个div添加到"box"中。
  • 定义一个时间间隔ID的变量"timeID"。
  • 为按钮"btn"添加点击事件。当按钮被点击时,根据按钮的值执行相应的操作。
    • 如果按钮的值是"点名",则通过setInterval函数设置一个定时器,每100毫秒自动执行dm函数,并将按钮的值设置为"停止"。
    • 如果按钮的值是"停止",则清除定时器,并将按钮的值设置为"点名"。
      • 首先,找到带有红色背景的名字,即拥有"class"为"highlight"的元素。如果存在这样的元素,就移除它的红色背景。
      • 然后,通过生成一个随机数,在数组"names"中随机选取一个名字,并为其添加红色背景。这里使用了classList.add方法来添加名字的"class",使其背景变红。
  • "dm"函数用于定时执行的点名操作。具体步骤如下:
    • 首先,清除已经选中的名字的红色背景。遍历"names"数组,如果某个名字的"class"包含"highlight",则移除它的红色背景。
    • 然后,通过生成一个随机数,在数组"arrs"中随机选取一个名字,并为其添加红色背景。

这段代码实现了一个简单的随机点名系统。点击按钮可以开始或停止点名,每次点名会随机选取一个名字,并将其背景颜色变为红色,表示被选中。

随机点名系统一实现效果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

随机点名系统二完整代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>随机点名</title>
    <style>
      div {
        width: 300px;
        margin: 10px auto;
        text-align: center;
      }
      div#ready {
        width: 200px;
        height: 50px;
        line-height: 50px;
        border: 1px solid orange;
        text-align: center;
      }
      button#start {
        width: 200px;
        height: 30px;
        line-height: 30px;
        text-align: center;
        border: 1px solid orange;
        background-color: bisque;
        margin-top: 10px;
      }
      .highlight {
        background-color: red;
      }
    </style>
  </head>
  <body>
    <div>
      <div id="ready">同学们,准备好了吗?</div>
      <button id="start" onclick="toggleRandomName()">点名</button>
      <div id="result"></div>
    </div>

    <script>
      var names = ["张三", "李四", "王五", "赵六", "钱七"]; // 姓名数组
      var timerId = null; // 定时器ID

      function toggleRandomName() {
        var btn = document.getElementById("start");
        if (btn.innerText === "点名") {
          // 开始点名
          btn.innerText = "停止";
          timerId = setInterval(changeName, 100);
        } else {
          // 停止点名
          btn.innerText = "点名";
          clearInterval(timerId);
          displayRandomName(); // 显示被点名的名字
          highlightRandomName(); // 移除红色背景
        }
      }

      function changeName() {
        var index = Math.floor(Math.random() * names.length); // 随机选取一个索引
        highlightRandomName(); // 清除之前选中的名字的红色背景
        document.getElementById("result").innerText = names[index]; // 更新结果区域的文本内容为选中的名字
        document.getElementsByClassName("name")[index].classList.add("highlight"); // 为随机选中的名字添加红色背景
      }

      function highlightRandomName() {
        var highlightedName = document.getElementsByClassName("highlight")[0]; // 获取当前被选中的名字元素
        if (highlightedName) {
          highlightedName.classList.remove("highlight"); // 移除其红色背景
        }
      }

      function displayRandomName() {
        var resultElem = document.getElementById("result");
        resultElem.innerText = "被点名的是:" + resultElem.innerText;
      }
    </script>
  </body>
</html>

在这里插入图片描述
以上代码是一个简单的随机点名程序。现在让我们逐行解析代码的作用:

HTML部分:

<div>
  <div id="ready">同学们,准备好了吗?</div>
  <button id="start" onclick="toggleRandomName()">点名</button>
  <div id="result"></div>
</div>

这部分包含了一个准备提示文字、一个按钮和一个用于显示结果的div。

CSS部分:

div {
  width: 300px;
  margin: 10px auto;
  text-align: center;
}
div#ready {
  width: 200px;
  height: 50px;
  line-height: 50px;
  border: 1px solid orange;
  text-align: center;
}
button#start {
  width: 200px;
  height: 30px;
  line-height: 30px;
  text-align: center;
  border: 1px solid orange;
  background-color: bisque;
  margin-top: 10px;
}
.highlight {
  background-color: red;
}

这部分定义了页面元素的样式,包括div和button的样式,以及被选中名字的高亮样式。

var names = ["张三", "李四", "王五", "赵六", "钱七"]; // 姓名数组
var timerId = null; // 定时器ID

function toggleRandomName() {
  var btn = document.getElementById("start");
  if (btn.innerText === "点名") {
    // 开始点名
    btn.innerText = "停止";
    timerId = setInterval(changeName, 100);
  } else {
    // 停止点名
    btn.innerText = "点名";
    clearInterval(timerId);
    displayRandomName(); // 显示被点名的名字
    highlightRandomName(); // 移除红色背景
  }
}

function changeName() {
  var index = Math.floor(Math.random() * names.length); // 随机选取一个索引
  highlightRandomName(); // 清除之前选中的名字的红色背景
  document.getElementById("result").innerText = names[index]; // 更新结果区域的文本内容为选中的名字
  document.getElementsByClassName("name")[index].classList.add("highlight"); // 为随机选中的名字添加红色背景
}

function highlightRandomName() {
  var highlightedName = document.getElementsByClassName("highlight")[0]; // 获取当前被选中的名字元素
  if (highlightedName) {
    highlightedName.classList.remove("highlight"); // 移除其红色背景
  }
}

function displayRandomName() {
  var resultElem = document.getElementById("result");
  resultElem.innerText = "被点名的是:" + resultElem.innerText;
}

这部分包含了几个 JavaScript 函数:

toggleRandomName:用于开始/停止点名。当按钮文字为"点名"时,点击按钮将开始点名过程;当按钮文字为"停止"时,点击按钮将停止点名,并显示被点名的名字。

changeName:用于随机选择一个名字并显示在结果区域。它会先清除之前选中的名字的红色背景,然后将随机选择的新名字显示在结果区域,并为其添加红色背景。

highlightRandomName:用于移除之前选中的名字的红色背景。它会查找当前被选中的名字元素,如果存在则移除其红色背景。
displayRandomName:用于在停止点名时显示被点名的名字。
整体运行流程如下:

点击"点名"按钮将开始点名过程,按钮文字变为"停止"。
每100毫秒随机选择一个名字,并更新结果区域的显示和名字的高亮。

点击"停止"按钮将停止点名过程,按钮文字变回"点名"。同时显示被点名的名字,并移除名字的高亮。

这样,就完成了一个简单的随机点名程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1114745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sahi切片辅助训练推理

本文的目的切片yolov5标注格式的数据&#xff0c;并保存图片和标注文件 代码实现步骤如下 把yolov5格式转换成coco格式标签&#xff1b;切片图片和coco标签&#xff1b;把切片出来的coco标签转换回yolov5标签格式 # 1. 把yolov5格式转换成coco格式标签&#xff1b; # 2. 切片…

Java关键字 `super` 的骚操作

文章目录 1. 调用父类构造方法2. 访问父类属性和方法3. 创建父类引用4. 在接口中使用 super5. 在 Lambda 表达式中使用 super6. 异常处理结语 &#x1f389;欢迎来到Java学习路线专栏~Java关键字 super 的骚操作 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#…

Android gradle动态配置不同打包环境参数值

一、背景 在android开发中&#xff0c;包的构建通过gradle脚本来完成的&#xff0c;这个脚本也提供了很多东西来配合我们开发。最常见的类似渠道和不同版本包。 打包的配置常见的是buildTypes节点&#xff0c;通过buildTypes设置不同的action完成不同包的输出 二、gradle的Jav…

(八)vtk常用类的常用函数介绍(附带代码示例)

vtk中类的说明以及函数使用 https://vtk.org/doc/nightly/html/annotated.html 一、vtkObject派生类 1.vtkPoints 点 InsertNextPoint(double, double, double)&#xff1a;插入点。 2.vtkCellArray 单元数组 InsertNextCell (vtkIdType npts, const vtkIdType *pts)&…

【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程

【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程 Shuffle是什么Shuffle的流程处理map任务的执行流程reduce任务的执行流程 Shuffle过程分析和优化map任务深入分析细化步骤分析1. 数据分片读取2. 分配计算Reduce服务Partitioner分区…

LINUX | hexdump以16进制查看文件内容

LINUX | hexdump以16进制查看文件内容 时间&#xff1a;2023-10-20 文章目录 LINUX | hexdump以16进制查看文件内容1.参考2.示例1.以ASCII字符显示文件中字符2.以16进制和相应的ASCII字符显示文件里的字符3.只显示文件中前n个字符4.以偏移量开始格式输出 1.参考 1.Linux命令–h…

C语言指针精简版(二)

目录 数组名的理解 使⽤指针访问数组 ⼀维数组传参的本质 冒泡排序 ⼆级指针及其解引用 指针数组 实例&#xff1a;指针数组模拟⼆维数组 数组名的理解 对于数组名表示的意义一共有三种情况&#xff1a; *1、数组名&#xff1a;表示数组⾸元素地址。 *2、sizeof(数组名…

中文编程工具开发语言开发的实际案例:触摸屏点餐软件应用场景实例

中文编程工具开发语言开发的实际案例&#xff1a;触摸屏点餐软件应用场景实例 软件特色&#xff1a; 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff0c;已内置数据库。软件在关闭的时候&#xff0c;可以设置会员数据备份到U盘&…

@Controller与@RestController

总结 Controller &#xff1a;定义一个控制器类. RequestMapping &#xff1a;给出外界访问方法的路径&#xff0c;或者说触发路径 &#xff0c;触发条件。 具体解析访问路径到某个方法上. ResponseBody &#xff1a;标记Controller类中的方法。把return的结果变成JSON对象…

束从轩的“网红人设”,正在加重老乡鸡的割裂

文 | 螳螂观察 作者 | 图霖 “老乡鸡20周年&#xff0c;我请大家免费吃饭。” 和以往的每场活动一样&#xff0c;“网红老板”束从轩穿着印有老乡鸡品牌Logo的大红短袖T恤&#xff0c;向广大网友发出热情邀请&#xff0c;真诚得像是自家村口小卖部好客的大叔。 这并不是束从…

虹科 | 测试方案 | 汽车示波器 通讯网络(LIN/CAN/FlexRay)测试方案

通讯网络&#xff08;LIN/CAN/FlexRay&#xff09;测试 虹科CAN总线示波器把你的PC电脑变成一台功能强大的汽车测试工具&#xff0c;用于检测车辆网络各类通讯信号&#xff0c;如CAN Bus、CAN FD、LIN、FlexRay&#xff0c;还可以检测车上所有传感器和执行器的信号 串行译码 …

【动态规划】647. 回文子串、516. 最长回文子序列

提示&#xff1a;努力生活&#xff0c;开心、快乐的一天 文章目录 647. 回文子串&#x1f4a1;解题思路&#x1f914;遇到的问题&#x1f4bb;代码实现&#x1f3af;题目总结 516. 最长回文子序列&#x1f4a1;解题思路&#x1f914;遇到的问题&#x1f4bb;代码实现&#x1f3…

计算机网络学习笔记(四):网络层(待更新)

目录 4.1 IP地址、子网划分、合并超网 4.1.1 IP地址、子网掩码、网关 4.1.2 IP地址的编址方法1&#xff1a;IP地址分类&#xff08;A~E类地址、保留的IP地址&#xff09; 4.1.4 IP地址的编址方法2&#xff1a;子网划分&#xff08;等长、变长&#xff09; 4.1.5 IP地址的编…

uview组件使用笔记

图标样式 修改图标的样式 通过color参数修改图标的颜色通过size参数修改图标的大小&#xff0c;单位为rpx 效果图 <u-icon name"photo" color"#2979ff" size"28"></u-icon>图片图标 1.3.0 这里说的图片图标&#xff0c;指的是小…

RSTP详解:对比STP,到底改进了什么?

一、RSTP概述 IEEE 802.1W中定义的RSTP可以视为STP的改进版本&#xff0c;RSTP在许多方面对STP进行了优化&#xff0c;它的收敛速度更快&#xff0c;而且能够兼容STP。 二、RSTP对STP的改进 改进点1&#xff1a;端口角色 、 改进点2&#xff1a;端口状态 RSTP的状态规范缩…

5秒盾,加速乐

5秒盾 1.先清除网站cooke在刷新&#xff0c;如果出现的稍等就有可能是5秒盾 2.用fd抓搜索参数关键字定位到包 3.抓到包后查找加密参数 4.搜索看那个位置在赋值 5.搜索赋值的参数.去找加密的js 6.删除没用的代码&#xff0c;把检测指纹的赋值过去 7.还原代码在网站的页面…

搞懂TypeScript的类型声明

.d.ts 类型声明/定义文件是 TypeScript 重要的一部分&#xff0c; 希望本文可以带你搞懂下面几个问题&#xff1a; 类型声明是怎么被TypeScirpt识别到的?怎么使用第三方包的类型声明文件&#xff1f;TypeScript代码怎么编译生成类型声明文件&#xff1f;怎么为第三方包编写类…

94. 递归实现排列型枚举

题目&#xff1a; 94. 递归实现排列型枚举 - AcWing题库 思路&#xff1a; 1.全排列问题&#xff08;坑位问题&#xff09;---->递归搜索树---->用dfs深度优先搜索。 2. u表示当前坑位&#xff0c;state[u]表示坑位u存储的数据。因为不同坑位的数据不可以重复&#…

掌握高效创作的艺术:AI助你轻松生成高质量文章

在这个信息爆炸的时代&#xff0c;高效创作已成为一种必需。无论是写作、编辑&#xff0c;还是策划&#xff0c;我们都需要快速、准确地完成工作。然而&#xff0c;我们都有过这样的经历&#xff1a;在创作过程中&#xff0c;我们可能会遇到思路阻塞、词汇匮乏等问题&#xff0…

【IBIS 模型与仿真 - IBISWriter and Write_IBIS】

本文将介绍如何从用户设计中编写自定义IBIS模型。 本文是 SelectIO 解决方案中心&#xff08;Xilinx 答复 50924&#xff09;的设计助手部分&#xff08;Xilinx 答复 50926&#xff09;的一部分。 原文链接&#xff1a;https://support.xilinx.com/s/article/50957?languagee…