前端三剑客实验5-6-复盘

实验 5 - JavaScript对象

若需要源代码,文章末尾自提

1、实现如下编程内容:

1. 分别使用工厂模式、构造函数和class模式来构建移动硬盘对象

在这里插入图片描述

2. 彩票号码生成器

随机生成7个1-36之间的随机数,要求数字不重复,并按从小到大的顺序排序输出到控制台。

3. 在一些电商网站的活动页上会经常出现折扣商品的倒计时标记,显示离活动结束还剩X天X小时X分X秒。编制一个函数,把促销截止的目标时间作为参数传入,然后在控制器台每间隔1s显示促销结束倒计时。

4. 要求在一组字符串中,找到并在控制台输出所有指定元素出现的位置以及次数。字符串为“Hello World, Hello JavaScript”。

2、具体代码实现

第一题

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>PortableHD 对象</title>
  <script>
    // 工厂模式
    function createPortableHDByFactory(brand, capacity, price) {
      return {
        brand: brand,
        capacity: capacity,
        price: price,
        showInfo: function () {
          return `品牌:${this.brand},容量:${this.capacity}GB,价格:$${this.price}`;
        },
        readData: function () {
          // 实际读取数据的逻辑
          return '读取数据中...';
        },
        writeData: function () {
          // 实际写入数据的逻辑
          return '写入数据中...';
        }
      };
    }

    // 构造函数
    function PortableHDByConstructor(brand, capacity, price) {
      this.brand = brand;
      this.capacity = capacity;
      this.price = price;
      this.showInfo = function () {
        return `品牌:${this.brand},容量:${this.capacity}GB,价格:$${this.price}`;
      };
      this.readData = function () {
        return '读取数据中...';
      };
      this.writeData = function () {
        return '写入数据中...';
      };
    }

    // Class 模式
    class PortableHDByClass {
      constructor(brand, capacity, price) {
        this.brand = brand;
        this.capacity = capacity;
        this.price = price;
      }

      showInfo() {
        return `品牌:${this.brand},容量:${this.capacity}GB,价格:$${this.price}`;
      }

      readData() {
        return '读取数据中...';
      }

      writeData() {
        return '写入数据中...';
      }
    }

    // 验证工厂模式
    const portableHDFactory = createPortableHDByFactory('品牌A', 500, 100);
    console.log(portableHDFactory.showInfo());
    console.log(portableHDFactory.readData());
    console.log(portableHDFactory.writeData());

    // 验证构造函数
    const portableHDConstructor = new PortableHDByConstructor('品牌B', 1000, 150);
    console.log(portableHDConstructor.showInfo());
    console.log(portableHDConstructor.readData());
    console.log(portableHDConstructor.writeData());

    // 验证 Class 模式
    const portableHDClass = new PortableHDByClass('品牌C', 2000, 200);
    console.log(portableHDClass.showInfo());
    console.log(portableHDClass.readData());
    console.log(portableHDClass.writeData());
  </script>
</head>
<body>
  <h1>PortableHD 对象</h1>
  <p>在控制台中查看对象信息和方法调用。</p>
</body>
</html>

运行结果
在这里插入图片描述

2、第二题

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>彩票号码生成器</title>
  <script>
    function generateLotteryNumbers() {
      const lotteryNumbers = [];

      // 生成7个不重复的随机数
      while (lotteryNumbers.length < 7) {
        const randomNum = Math.floor(Math.random() * 36) + 1;
        if (!lotteryNumbers.includes(randomNum)) {
          lotteryNumbers.push(randomNum);
        }
      }

      // 按从小到大的顺序排序
      lotteryNumbers.sort((a, b) => a - b);

      // 输出到控制台
      console.log('生成的彩票号码:', lotteryNumbers);

      // 将结果显示在页面上
      const resultContainer = document.getElementById('result');
      resultContainer.textContent = '生成的彩票号码: ' + lotteryNumbers.join(', ');
    }

    // 在页面加载时生成彩票号码
    window.onload = generateLotteryNumbers;
  </script>
</head>
<body>
  <h1>彩票号码生成器</h1>
  <p id="result">生成中...</p>
</body>
</html>

运行结果
在这里插入图片描述

3、第三题

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>促销倒计时</title>
  <script>
    function startCountdown(targetTime) {
      const targetDate = new Date(targetTime).getTime();

      // 更新倒计时每秒钟
      const countdownInterval = setInterval(function() {
        const now = new Date().getTime();
        const timeRemaining = targetDate - now;

        if (timeRemaining <= 0) {
          clearInterval(countdownInterval);
          console.log('促销已结束');
        } else {
          const days = Math.floor(timeRemaining / (1000 * 60 * 60 * 24));
          const hours = Math.floor((timeRemaining % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
          const minutes = Math.floor((timeRemaining % (1000 * 60 * 60)) / (1000 * 60));
          const seconds = Math.floor((timeRemaining % (1000 * 60)) / 1000);

          console.log(`距离促销结束还剩 ${days}${hours}小时 ${minutes}分钟 ${seconds}`);
        }
      }, 1000);
    }

    // 在页面加载时启动倒计时,目标时间为当前时间的5分钟后
    window.onload = function() {
      const targetTime = new Date().getTime() + 5 * 60 * 1000; // 5分钟后
      startCountdown(targetTime);
    };
  </script>
</head>
<body>
  <h1>促销倒计时</h1>
  <p>在控制台查看倒计时。</p>
</body>
</html>

运行结果
请添加图片描述

4、第四题

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>查找元素位置和次数</title>
  <script>
    function findElementOccurrences(inputString, targetElement) {
      const positions = [];
      let index = inputString.indexOf(targetElement);

      while (index !== -1) {
        positions.push(index);
        index = inputString.indexOf(targetElement, index + 1);
      }

      const count = positions.length;

      if (count > 0) {
        console.log(`元素 "${targetElement}" 在字符串中出现的位置:${positions}`);
        console.log(`元素 "${targetElement}" 在字符串中出现的次数:${count}`);
      } else {
        console.log(`元素 "${targetElement}" 未在字符串中找到`);
      }
    }

    // 在页面加载时调用示例
    window.onload = function() {
      const inputString = "Hello World, Hello JavaScript";
      const targetElement = "Hello";
      findElementOccurrences(inputString, targetElement);
    };
  </script>
</head>
<body>
  <h1>查找元素位置和次数</h1>
  <p>在控制台查看输出结果。</p>
</body>
</html>

运行结果
在这里插入图片描述

实验6 Javascript DOM -1操作实验

资料见文末

1、实验内容和过程:

实现如下编程内容:

1. 自行设定表单界面,求某范围的质数。

操作要求如下:
 数字的开始范围和结束范围自行在文本输入框录入,然后点击“查询”按钮后,
在下方网页中显示这个范围内对应的质数。
 质数输出为红色数字,每行输出10个
 最后统计质数的数量和所有质数数字之和

2. 编制案例,在一个屏幕居中的文本框中输入密码信息,要求如下:

 所有密码信息用号表示
 点击右侧“眼睛”图片后,可以去除
号字符遮蔽,显示为明文数字。

2、具体实现

1、第一题具体实现:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>质数查询</title>
  <style>
    .prime {
      color: red;
      margin-right: 10px;
    }
  </style>
  <script>
    function isPrime(number) {
      if (number < 2) return false;
      for (let i = 2; i <= Math.sqrt(number); i++) {
        if (number % i === 0) {
          return false;
        }
      }
      return true;
    }

    function findPrimes() {
      const startRange = parseInt(document.getElementById('startRange').value);
      const endRange = parseInt(document.getElementById('endRange').value);

      if (isNaN(startRange) || isNaN(endRange) || startRange >= endRange) {
        alert('请输入有效的数字范围!');
        return;
      }

      const primesContainer = document.getElementById('primesContainer');
      primesContainer.innerHTML = ''; // 清空之前的结果

      let primeCount = 0;
      let primeSum = 0;

      for (let number = startRange; number <= endRange; number++) {
        if (isPrime(number)) {
          primeCount++;
          primeSum += number;

          const primeElement = document.createElement('span');
          primeElement.textContent = number;
          primeElement.className = 'prime';

          primesContainer.appendChild(primeElement);

          if (primeCount % 10 === 0) {
            primesContainer.appendChild(document.createElement('br'));
          }
        }
      }

      const resultSummary = `质数数量: ${primeCount}, 质数总和: ${primeSum}`;
      document.getElementById('resultSummary').textContent = resultSummary;
    }
  </script>
</head>
<body>
  <h1>质数查询</h1>
  <form>
    <label for="startRange">开始范围:</label>
    <input type="number" id="startRange" required>
    <label for="endRange">结束范围:</label>
    <input type="number" id="endRange" required>
    <button type="button" onclick="findPrimes()">查询</button>
  </form>
  <div id="primesContainer"></div>
  <p id="resultSummary"></p>
</body>
</html>

运行结果
请添加图片描述

2、第二题具体实现 (需要images文件夹)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>密码款的小眼睛</title>
    <style>
      .box {
        position: relative;
        width: 400px;
        border: 1px solid #ccc;
        margin: 100px auto;
        padding: 2px;
      }
      .box input {
        width: 370px;
        height: 30px;
        border: 0;
        outline: none;
      }
      .box img {
        position: absolute;
        top: 4px;
        right: 6px;
        width: 24px;
        cursor: pointer;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <label for="">
        <img src="images/close.png" alt="" id="eye">
      </label>
      <input type="password" name="" id="pwd">
    </div>

    <script>
      // 1. 获取元素
      var eye = document.getElementById('eye');
      var pwd = document.getElementById('pwd');

      // 2. 注册事件处理程序
      var flag = 0;
      eye.onclick = function () {
        // 每次单击,修改flag的值
        if (flag == 0) {
          pwd.type = 'text';
          eye.src = 'images/open.png';
          flag = 1;
        } else {
          pwd.type = 'password';
          eye.src = 'images/close.png';
          flag = 0;
        }
      };
      
    </script>

  </body>
</html>

运行结果
在这里插入图片描述

3、资料自提(若过期,请留言)

实验5:

链接:https://pan.baidu.com/s/1azl5_wwM-M_1l-Vh3c8Lzg?pwd=mwps
提取码:mwps

实验6:

链接:https://pan.baidu.com/s/1YWdCnRxXLxAR-Z9xzRKgXw?pwd=5dr4
提取码:5dr4

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

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

相关文章

合并排序可视化

合并排序可视化 结果 按照位置分色 按照数组值大小分色 可视化代码 参照 冒泡排序可视化 合并排序 public void mergeSort(List<Integer> list, int[] help, int l, int r) {if (l > r) {return;}int mid l (r - l) / 2;mergeSort(list, help, l, mid);mergeSor…

WPF中使用ListView封装组合控件TreeView+DataGrid

&#xff08;关注博主后&#xff0c;在“粉丝专栏”&#xff0c;可免费阅读此文&#xff09; wpf的功能非常强大&#xff0c;很多控件都是原生的&#xff0c;但是要使用TreeViewDataGrid的组合&#xff0c;就需要我们自己去封装实现。 我们需要的效果如图所示&#x…

Nsum问题

题目 题解 暴力法 class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:if len(nums) < 4:return []nums.sort()N len(nums)res []for i in range(N-3):for j in range(i1, N-2):for k in range(j1, N-1):for m in range(k1, N):tmp…

灰盒测试简要指南!

在本文中&#xff0c;我们将了解什么是灰盒测试、以及为什么要使用它&#xff0c;以及它的优缺点。 在软件测试中&#xff0c;灰盒测试是一种有用的技术&#xff0c;可以确保发布的软件是高性能的、安全的并满足预期用户的需求。这是一种从外部测试应用程序同时跟踪其内部操作…

ffmpeg使用入门

1. ffmpeg是什么&#xff1a; FFmpeg是一款音视频编解码工具&#xff0c;也是一组音视频编解码开发套件&#xff0c;为开发者提供了丰富的音视频处理调用接口。 FFmpeg源代码编译后会生成三个可执行程序&#xff0c;分别是&#xff1a;ffmpeg、ffplay、ffprobe&#xff0c; 这…

行为型设计模式(四):中介模式 命令模式

中介模式 Mediator 1、什么是中介模式 中介模式用于减少对象之间的直接通信&#xff0c;让系统可以更加松耦合。定义了一个中介者对象&#xff0c;该对象封装了一系列对象的交互&#xff0c;使得对象之间不再直接相互引用&#xff0c;而是通用这个中介者对象进行通信。 2、为…

【开源工程及源码】超级经典开源项目实景三维数字孪生智慧港口

智慧港口可视化平台&#xff0c;旨在实现对港口运营的全面监测、智能管理和优化决策。飞渡科技利用数字化、模拟和仿真的技术&#xff0c;通过互联的传感器和设备&#xff0c;实现实时数据的采集、传输和分析&#xff0c;将港口内外的复杂数据以直观、易懂的方式呈现&#xff0…

搜索二叉树(超详解)

文章目录 前言查找搜索二叉树的结构insertfinderase递归版本Findinserterase 二叉树的拷贝问题搜索二叉树的应用Key模型Key/Value的模型 前言 普通二叉树其实意义不大&#xff0c; 如果用二叉树存储数据的话&#xff0c;还不如顺序表&#xff0c;链表这些。 搜索二叉树它的意义…

核货宝订单管理系统提高企业效率

核货宝订单管理系统可以帮助企业提高效率&#xff0c;具体体现在以下几个方面&#xff1a; 一、订单自动化处理&#xff1a;核货宝订单管理系统支持订单批发和多渠道订单导入&#xff0c;它可以从订单的接收、处理、跟进、发货、到售后服务等环节都可以通过系统自动完成&#x…

DBA-MySql面试问题及答案-上

文章目录 1.什么是数据库?2.如何查看某个操作的语法?3.MySql的存储引擎有哪些?4.常用的2种存储引擎&#xff1f;6.可以针对表设置引擎吗&#xff1f;如何设置&#xff1f;6.选择合适的存储引擎&#xff1f;7.选择合适的数据类型8.char & varchar9.Mysql字符集10.如何选择…

python脚本 链接到ssh服务器 快速登录ssh服务器 ssh登录

此文分享一个python脚本,用于管理和快速链接到ssh服务器。 效果演示 🔥完整演示效果 👇第一步,显然,我们需要选择功能 👇第二步,确认 or 选择ssh服务器,根据配置文件中提供的ssh信息,有以下情况 👇场景一,只有一个候选ssh服务器,则脚本会提示用户是否确认链…

吴恩达RLHF课程笔记

1.创建偏好数据集 一个prompt输入到LLM后可以有多个回答&#xff0c;对每个回答选择偏好 比如{prompt,answer1,answer2,prefer1} 2.根据这个数据集&#xff08;偏好数据集&#xff09;&#xff0c;创建reward model&#xff0c;这个model也是一个LLM,并且它是回归模型&#…

C语言之指针

目录 函数的参数 对象和地址 取地址运算符 注意 指针 注意 指针运算符 注意 在C语言中&#xff0c;指针是一个十分重要的概念&#xff0c;它的作用是“指示对象”。 例如&#xff1a;你要去一座公寓楼找一位朋友&#xff0c;公寓楼由很多楼层组成&#xff0c;每个楼层…

解决 MATLAB 遗传算法中 exitflg=4 的问题

一、优化问题简介 以求解下述优化问题为例&#xff1a; P 1 : min ⁡ p ∑ k 1 K p k s . t . { ∑ k 1 K R k r e q l o g ( 1 α k ∗ p k ) ≤ B b s , ∀ k ∈ K p k ≥ 0 , ∀ k ∈ K \begin{align} {P_1:}&\mathop{\min}_{\bm{p}}{ \sum\limits_{k1}^K p_k } \no…

【Linux笔记】文件查看和编辑

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux学习 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 命令 cat (Concatenate and Display): more 和 less: nano 和 vim (文本编辑器): 结语 我的其他博客 前言 学习Linux命令行和文件…

1854_bash中利用管道进行批量参数传递以及由此实现简单的代码行数统计

Grey 全部学习内容汇总&#xff1a; GreyZhang/bash_basic: my learning note about bash shell. (github.com) 1854_bash中的参数传递以及利用bash进行简单的代码行数统计 有时候需要处理多个文件&#xff0c;把每一个文件作为参数传递给某一个程序。这时候可以用到 xargs&…

高频知识汇总 | 【操作系统】面试题汇总(万字长博通俗易懂)

前言 这篇我亲手整理的【操作系统】资料&#xff0c;融入了我个人的理解。当初我在研习八股文时&#xff0c;深感复习时的困扰&#xff0c;网上资料虽多&#xff0c;却过于繁杂&#xff0c;有的甚至冗余。例如&#xff0c;文件管理这部分&#xff0c;在实际面试中很少涉及&…

Ai图片处理

Ai也可以直接导入PS文件&#xff0c;只不过需要进行一个相关的选择&#xff0c;一般来说是将图层转化为对象 第二个为图层拼合为单个图像&#xff08;不常用&#xff09; 第三个则是将隐藏的图片也进行显示 如果你觉得图片的信息的过少好想插入其他的图片&#xff0c;可以选择…

认识Linux背景

1.发展史 Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史 要说Linux&#xff0c;还得从UNIX说起 UNIX发展的历史 1968年&#xff0c;一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Mu…

BDD - Python Behave Tags 过滤

BDD - Python Behave Tags 过滤 引言实例创建 feature 文件创建 step 实现 Tag 过滤执行执行单个标签 --tagstagname执行多个标签 OR 关系 --tagstag1,tag2多个标签 AND 关系 --tagstag1 --tagstag2单标签非关系 --tags ~tagname 引言 随着项目进展&#xff0c;QA 创建的 Beh…