H5前端开发——BOM

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毫秒随机选择一个名字,并更新结果区域的显示和名字的高亮。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之命令模式

文章目录 一、介绍二、命令模式中的角色三、案例1. 命令的抽象接口Command2. 进攻AttackCommand3. 意大利炮cannonCommand4. 开炮FireCommand5. 李云龙LiYunLong6. 运行案例 四、优缺点 一、介绍 命令模式(Command Pattern)&#xff0c;属于行为型设计模式。指的是把方法调用封…

系统架构设计师之RUP软件开发生命周期

系统架构设计师之RUP软件开发生命周期

自建的离散傅里叶变换matlab程序实现及其与matlab自带函数比较举例

自建的离散傅里叶变换matlab程序实现及其与matlab自带函数比较举例 在matlab中有自带的离散傅里叶变换程序&#xff0c;即fft程序&#xff0c;但该程序是封装的&#xff0c;无法看到源码。为了比较清楚的了解matlab自带的实现过程&#xff0c;本文通过自建程序实现matlab程序&…

IntelliJ IDEA 2023.2正式发布,新UI和Profiler转正

你好&#xff0c;我是YourBatman&#xff1a;做爱做之事❣交配交之人。 &#x1f4da;前言 北京时间2023年7月26日&#xff0c;IntelliJ IDEA 2023.2正式发布。老规矩&#xff0c;吃肉之前&#xff0c;可以先把这几碗汤干了&#xff0c;更有助于消化&#xff08;每篇都很顶哦…

排序-表排序

当我们需要对一个很大的结构体进行排序时&#xff0c;因为正常的排序需要大量的交换&#xff0c;这就会造成时间复杂度的浪费 因此&#xff0c;我们引入指针&#xff0c;通过指针临时变量的方式来避免时间复杂度的浪费 间接排序-排序思路&#xff1a;通过开辟一个指针数组&…

十个最常用的计算机视觉数据集

如今&#xff0c;人工智能和机器学习领域中最振奋人心的一个分支是计算机视觉&#xff08;Computer Vision&#xff0c;简称CV&#xff09;。CV应用于多种场景&#xff0c;以改善我们的日常生活&#xff0c;并推进科学技术研究。其中包括&#xff1a; 自动驾驶自动生成图像描述…

重入漏洞EtherStore

重入漏洞 // SPDX-License-Identifier: MIT pragma solidity ^0.8.13;contract EtherStore {mapping(address > uint) public balances;function deposit() public payable {balances[msg.sender] msg.value;}function withdraw() public {uint bal balances[msg.sender]…

Linux 函数调用的用户态与内核态

在用户态中&#xff0c;程序的执行往往是一个函数调用另一个函数。函数调用都是通过栈来进行的。 在进程的内存空间里面&#xff0c;栈是一个从高地址到低地址&#xff0c;往下增长的结构&#xff0c;也就是上面是栈底&#xff0c;下面是栈顶&#xff0c;入栈和出栈的操作都是…

ModbusTCP 转 Profinet 主站网关在博图配置案例

兴达易控ModbusTCP转Profinet网关&#xff0c;在 Profinet 侧做为 Profinet 主站控制器&#xff0c;接 Profinet 设备&#xff0c;如伺服驱动器&#xff1b;兴达易控ModbusTCP 和 Profinet网关在 ModbusTCP 侧做为 ModbusTCP 从站&#xff0c;接 PLC、上位机、wincc 屏等。 拓…

k8s kubeadm配置

master 192.168.41.30 docker、kubeadm、kubelet、kubectl、flannel node01 192.168.41.31 docker、kubeadm、kubelet、kubectl、flannel node02 192.168.41.32 do…

python 字典dict和列表list的读取速度问题, range合并

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 python 字典和列表的读取速度问题 最近在进行基因组数据处理的时候&#xff0c;需要读取较大数据&#xff08;2.7G&#xff09;存入字典中&#xff0c; 然后对被处理数据进行字典key值的匹配&#xff0c;在被处理文件中每次…

Python:实现日历到excel文档

背景 日历是一种常见的工具,用于记录事件和显示日期。在编程中,可以使用Python编码来制作日历。 Python提供了一些内置的模块和函数,使得制作日历变得更加简单。 在本文,我们将探讨如何使用Python制作日历,并将日历输出到excel文档中。 效果展示 实现 在代码中会用到cale…

TypeScript学习 | 泛型

简介 泛型是指在定义函数、接口或类的时候&#xff0c;不预先指定具体的类型&#xff0c;而在使用的时候再指定类型的一种特性 作用 可以保证类型安全的前提下&#xff0c;让函数、接口或类与多种类型一起工作&#xff0c;从而实现复用 基本使用 举个例子&#xff1a; 创…

各品牌PLC存储器寻址的规则

在PLC编程时&#xff0c;字节或多字节的变量一般支持绝对地址寻址&#xff08;比如&#xff0c;IW0、MD4等&#xff09;。要想正确寻址&#xff0c;则必须要搞清楚寻址的规则。目前常见的规则有两种&#xff1a;字节寻址和字寻址。下图清晰地表达了两种规则的编号情况&#xff…

【C++】stackqueue

适配器是一种设计模式 &#xff0c; 该种模式是将一个类的接口转换成客户希望的另外一个接口 。 虽然 stack 和 queue 中也可以存放元素&#xff0c;但在 STL 中并没有将其划分在容器的行列&#xff0c;而是将其称为 容器适配 器 &#xff0c;这是因为 stack 和队列只是对其他容…

上传和下载文件到google drive/Local pc

1 上传 参考&#xff1a;使用 Python 将文件上传到 Google 云端硬盘_迹忆客 Upload file to google drive using Python - CodeSpeedy (没起作用&#xff0c;但可以参考一下) 第 1 步&#xff1a;Google API Playground 我们可以通过搜索 Google 找到更多关于 Google API Pla…

vue路径中“@/“代表什么

举例&#xff1a; <img src"/../static/imgNew/adv/tupian.jpg"/>其中&#xff0c;/是webpack设置的路径别名&#xff0c;代表什么路径&#xff0c;要看webpack的build文件夹下webpack.base.conf.js里面对于是如何配置&#xff1a; 上图中代表src,上述代码就…

出海路上离不开的Email营销,教你这样来优化!

随着互联网的不断发展&#xff0c;Email已经成为人们工作和生活中不可或缺的一部分。尤其是对于我们这些跨境企业而言&#xff0c;发送Email是一个促进销售和维护客户关系的良好渠道。而且邮件的价格也是比较低廉的&#xff0c;很适合用于日常推广营销&#xff0c;所以人手几个…

论文阅读 - Coordinated Behavior on Social Media in 2019 UK General Election

论文链接&#xff1a; https://arxiv.org/abs/2008.08370 目录 摘要&#xff1a; Introduction Contributions Related Work Dataset Method Overview Surfacing Coordination in 2019 UK GE Analysis of Coordinated Behaviors 摘要&#xff1a; 协调的在线行为是信息…

嵌入式软件工程师面试题——2025校招专题(三)

说明&#xff1a; 面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但在这里博主希望每一个题目&#xff0c;大家都要…