JS-WebAPIS(四)

news2024/11/15 5:00:39

日期对象(常用)

• 实例化

  • 在代码中发现了 new 关键字时,一般将这个操作称为实例化
  • 创建一个时间对象并获取时间

  • 获得当前时间

  • 获得指定时间 

• 时间对象方法

使用场景:因为日期对象返回的数据我们不能直接使用,所以需要转换为实际开发中常用的格式

• 时间戳

使用场景: 如果计算倒计时效果,前面方法无法直接计算,需要借助于时间戳完成

什么是时间戳

  • 是指1970年01月01日00时00分00秒起至现在的毫秒数,它是一种特殊的计量时间的方式

算法:

  • 将来的时间戳 - 现在的时间戳 = 剩余时间毫秒数
  • 剩余时间毫秒数 转换为 剩余时间的 年月日时分秒 就是 倒计时时间
  • 比如 将来时间戳 2000ms - 现在时间戳 1000ms = 1000ms
  • 1000ms 转换为就是 0小时0分1秒

三种方式获取时间戳:

  • 使用 getTime() 方法

  • 简写 +new Date()

  • 使用 Date.now() 

案例:倒计时案例

 需求:计算到下课还有多少时间
分析:
①:用将来时间减去现在时间就是剩余的时间
②:核心: 使用将来的时间戳减去现在的时间戳
③:把剩余的时间转换为 天 时 分 秒

注意:
1. 通过时间戳得到是毫秒,需要转换为秒在计算
2. 转换公式:

  • d = parseInt(总秒数/ 60/60 /24); // 计算天数
  • h = parseInt(总秒数/ 60/60 %24) // 计算小时
  • m = parseInt(总秒数 /60 %60 ); // 计算分数
  • s = parseInt(总秒数%60); // 计算当前秒数

<!DOCTYPE html>
<html lang="en">
<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>Document</title>
  <style>
    .box {
      width: 250px;
      height: 300px;
      background-color: rgb(143, 5, 5);
      margin: 100px auto;
      text-align: center;
      color: #fff;
      border: 1px solid transparent;
    }

    .box p:nth-of-type(1){
      margin: 20px;
    }
    .box p:nth-of-type(2){
      margin-top: 80px;
      font-size: 20px;
    }

    .box h3 {
      font-size: 30px;
    }

    .datetime span {
      display: inline-block;
      width: 30px;
      height: 30px;
      line-height: 30px;
      background: rgba(0, 0, 0, .7);
    }

  </style>
</head>
<body>
  <div class="box">
    <p>今天是2024年2月22日</p>
    <h3>过年倒计时</h3>
    <div class="datetime">
      <span class="day">22</span>天<span class="h">22</span>: <span class="m">22</span>: <span class="s">22</span>
    </div>
    <p>2024.2.9过年</p>
  </div>

  <script>

    /* 
    知识点复习:
    1 时间对象Date()的使用 --获取当前时间
    2 定时器-间歇函数     --间隔一秒调用函数,刷新时间
    3 获取dom元素
    4 复习Math内置对象
    */

  //页面初始化第一次
  getCountTime()
  //调用定时器不断刷新时间
  setInterval(getCountTime,1000)


  function getCountTime(){
    //实例化时间对象
    const date = new Date()
    // const today = date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate()
    const p1 = document.querySelector('.box p:nth-of-type(1)')
    p1.innerHTML = `今天是${date.getFullYear()}年${date.getMonth()+1}月${date.getDate()}日`
    const day = new Date('2024.2.9') - date
    // let a = new Date(`${date}`)
    // console.log(Math.ceil(day/24/60/60/1000))
    // console.log(a.getDate())
    // console.log(a.getHours())
    // console.log(a.getMinutes())
    // console.log(a.getSeconds())
    document.querySelector('.day').innerHTML = Math.floor(day/24/60/60/1000)
    document.querySelector('.h').innerHTML = Math.floor(day/60/60/1000%24)
    document.querySelector('.m').innerHTML = Math.floor(day/60/1000%60)
    document.querySelector('.s').innerHTML = Math.floor(day/1000%60)

    //修改盒子颜色
    // console.log(getRandomColor(false))
    document.querySelector('.box').style.backgroundColor = getRandomColor(false)
  }

  function getRandomColor(flag = true){
      //如果flag=true  则返回#ffffff形式的
      if(flag){
        let arr = ['1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
        
        let result ='#'
        for(let i = 1;i<=6;i++){
          let random = Math.floor(Math.random()*arr.length)
          result+=arr[random]
        }

        return result
      }else{
      //如果flag=false   则返回rag(255,255,255)形式的
      let r = Math.floor(Math.random()*256)
      let g = Math.floor(Math.random()*256)
      let b = Math.floor(Math.random()*256)
      return `rgb(${r},${g},${b})`
      }
    }
    

  </script>
</body>
</html>

 


节点操作(常用)

• DOM 节点

DOM树里每一个内容都称之为节点

  • 节点类型()

 总结:

1. 什么是DOM 节点?

  •  DOM树里每一个内容都称之为节点

2. DOM节点的分类?

  •  元素节点 比如 div标签
  •  属性节点 比如 class属性
  •  文本节点 比如标签里面的文字

3. 我们重点记住那个节点?

  •  元素节点
  •  可以更好的让我们理清标签元素之间的关系

• 查找节点

父节点查找:

  • parentNode 属性
  • 返回最近一级的父节点 找不到返回为null

子节点查找: 

  • childNodes

获得所有子节点、包括文本节点(空格、换行)、注释节点等

  • children 属性 (重点)
  1. 仅获得所有元素节点(只获取html标签)
  2. 返回的还是一个伪数组

兄弟节点查找: 

1. 下一个兄弟节点

  • nextElementSibling 属性

2. 上一个兄弟节点

  • previousElementSibling 属性

• 增加节点(重点)

场景:

 

1.创建节点

  • 创造出一个新的网页元素,再添加到网页内,一般先创建节点,然后插入节点
  • 创建元素节点方法:

 2.追加节点

  • 要想在界面看到,还得插入到某个父元素中
  • 插入到父元素的最后一个子元素:

  • 插入到父元素中某个子元素的前面 

 

• 删除节点

  • 若一个节点在页面中已不需要时,可以删除它
  • 在 JavaScript 原生DOM操作中,要删除元素必须通过父元素删除
  • 语法

注:

  •  如不存在父子关系则删除不成功
  • 删除节点和隐藏节点(display:none) 有区别的: 隐藏节点还是存在的,但是删除,则从html中删除节点 

M端事件(移动端)

移动端也有自己独特的地方。比如触屏事件 touch(也称触摸事件),Android 和 IOS 都有。

  • 触屏事件 touch(也称触摸事件),Android 和 IOS 都有。
  • touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。触屏事件可响应用户手指(或触控笔 )对屏幕或者触控板操作。
  • 常见的触屏事件如下:

JS插件(swiper)

  • 插件: 就是别人写好的一些代码,我们只需要复制对应的代码,就可以直接实现对应的效果
  • 学习插件的基本过程
  • 熟悉官网,了解这个插件可以完成什么需求           https://www.swiper.com.cn/
  • 看在线演示,找到符合自己需求的demo                https://www.swiper.com.cn/demo/index.html
  • 查看基本使用流程                                                https://www.swiper.com.cn/usage/index.html
  • 查看APi文档,去配置自己的插件                           https://www.swiper.com.cn/api/index.html
  • 注意: 多个swiper同时使用的时候, 类名需要注意区分

在官网下载后,从这个package夹中找到css和js文件,引入到项目中就可以用了,具体看文档

综合案例

学生信息表案例

说明:

本次案例,我们尽量减少dom操作,采取操作数据的形式

增加和删除都是针对于数组的操作,然后根据数组数据渲染页面

核心思路:
①: 声明一个空的数组
②: 点击录入,根据相关数据,生成对象,追加到数组里面
③: 根据数组数据渲染页面-表格的 行
④: 点击删除按钮,删除的是对应数组里面的数据
⑤: 再次根据数组的数据,渲染页面

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>学生信息管理</title>
  <link rel="stylesheet" href="css/index.css" />
</head>

<body>
  <h1>新增学员</h1>
  <form class="info" autocomplete="off">
    姓名:<input type="text" class="uname" name="uname" required />
    年龄:<input type="text" class="age" name="age" required />
    性别:
    <select name="gender" class="gender">
      <option value="男">男</option>
      <option value="女">女</option>
    </select>
    薪资:<input type="text" class="salary" name="salary" required />
    就业城市:<select name="city" class="city">
      <option value="北京">北京</option>
      <option value="上海">上海</option>
      <option value="广州">广州</option>
      <option value="深圳">深圳</option>
      <option value="曹县">曹县</option>
    </select>
    <button class="add">录入</button>
  </form>

  <h1>就业榜</h1>
  <table>
    <thead>
      <tr>
        <th>学号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
        <th>薪资</th>
        <th>就业城市</th>
        <th>操作</th>
      </tr>
    </thead>
    <tbody>
      <!-- 
        <tr>
          <td>1001</td>
          <td>欧阳霸天</td>
          <td>19</td>
          <td>男</td>
          <td>15000</td>
          <td>上海</td>
          <td>
            <a href="javascript:">删除</a>
          </td>
        </tr> 
        -->
    </tbody>
  </table>
  <script>

    /* 
    本案例使用到的知识点
    1 dom对象的获取
    2 数组操作
    3 事件流-阻止默认行为
    4 对象的操作
    5 事件绑定
    6 事件对象 e的用法
    7 对象的自定义属性
    */

    const add = document.querySelector('.add')
    const info = document.querySelector('.info')
    const tbody = document.querySelector('tbody')
    const uname = document.querySelector('.uname')
    const age = document.querySelector('.age')
    const gender = document.querySelector('.gender')
    const salary = document.querySelector('.salary')
    const city = document.querySelector('.city')
    const arr = []  //初始化数组用于存储数据
    const items = document.querySelectorAll('[name]')


    //1 为表单设置提交事件  //事件类型是提交事件
    info.addEventListener('submit', function (e) {

      //1.1 阻止表单默认行为,不然点击后会将内容提交给自己(这里的对象需要填写表单)
      e.preventDefault()
      console.log(11)

      //1.2初始化对象
      const obj = {
        stuId: arr.length + 1,
        uname: uname.value,
        age: age.value,
        gender: gender.value,
        salary: salary.value,
        city: city.value
      }

      //3 对表单元素进行验证
      for (let i = 0; i < items.length; i++) {
        if (items[i].value === '') {
          alert('内容不能为空!')
          //结束函数
          return
        }
      }

      //1.3将对象追加到数组种
      arr.push(obj)
      //重置表单
      this.reset()
      // console.log(arr)

      //1.4显然表单
      render()
    })


    function render() {
      //每次调用清空原来tbody种的元素
      tbody.innerHTML = ''
      for (let i = 0; i < arr.length; i++) {
        //创建tr
        const tr = document.createElement('tr')
        tr.innerHTML = `
          <td>${arr[i].stuId}</td>
          <td>${arr[i].uname}</td>
          <td>${arr[i].age}</td>
          <td>${arr[i].gender}</td>
          <td>${arr[i].salary}</td>
          <td>${arr[i].city}</td>
          <td>
            <a href="javascript:" data-id=${i}>删除</a>
          </td>
      `
        //将填入追加到tbody种
        tbody.appendChild(tr)
      }
    }


    //2点击a元素删除数组对象  --使用事件委托
    tbody.addEventListener('click', function (e) {
      //2.1只有点击a,才做操作
      if (e.target.tagName === 'A') {
        // console.log(111)
        //2.2获取a种的自定义属性值
        //  console.log(e.target.dataset.id)
        //根据自定义属性的值删除数组元素
        arr.splice(e.target.dataset.id, 1)
        //2.3删除操作后重新渲染
        render()
      }
    })
  </script>

</body>

</html>

 

 

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

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

相关文章

Android Studio安卓开发--ListView学习整理

ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内&#xff0c;同时屏幕上原有的数据则会滚动出屏幕。 1.ListView的简单用法 &#xff08;1&#xff09;activity_main.xml布局中加入ListView控件&#xff1a;&#xff08;先占满整个布局的空间&#xff09;…

网络安全与人工智能的交叉点

网络安全和人工智能 (AI) 的联系日益紧密&#xff0c;人工智能在增强网络安全措施方面发挥着重要作用。这种集成并不新鲜&#xff0c;但随着技术的进步和网络威胁变得更加复杂&#xff0c;它已经随着时间的推移而发展。 在网络安全的早期&#xff0c;防火墙和防病毒软件等传统…

用git bash调用md5sum进行批量MD5计算

对于非常大的文件或者很重要的文件&#xff0c;在不稳定的网络环境下&#xff0c;可能文件的某些字节会损坏。此时&#xff0c;对文件计算MD5即可以校验其完整性。比如本次的 OpenStreetMap 导出包&#xff0c;我的学弟反馈通过网盘下载无法解压&#xff0c;并建议我增加每个文…

uni-app使用HBuilderX打包Web项目

非常简单&#xff0c;就是容易忘记 一、找到manifest.json配置Web配置 二、源码视图配置 "h5" : {"template" : "","domain" : "xxx.xx.xx.xxx","publicPath" : "./","devServer" : {&quo…

如何启动Windows平台轻量级RTSP服务生成RTSP拉流URL

为满足内网无纸化/电子教室等内网超低延迟需求&#xff0c;避免让用户配置单独的服务器&#xff0c;我们在推送端发布了轻量级RTSP服务模块&#xff1a; 简单来说&#xff0c;之前推送端SDK支持的功能&#xff0c;内置轻量级RTSP服务模块后&#xff0c;功能继续支持。 轻量级…

00-Rust前言

问&#xff1a;为什么要近期想学习Rust? 答&#xff1a; Rust出来也是有一段时间了&#xff0c;从Microsoft吵着要重构他们的C"祖传代码"开始&#xff0c;Rust就披着“高效&#xff0c;安全”的头衔。而自己决定要学习Rust&#xff0c;是因为近期发现&#xff1a;与…

git本地分支的合并

目录 第一章、本地分支的切换测试1.1&#xff09;切换之前的master分支下文件内容1.2&#xff09;切换到develop分支后修改文件1.3&#xff09;切回master分支出现报错&#xff1a;1.4&#xff09;报错分析 第二章、解决方式2.1&#xff09;方式1&#xff1a;commit2.2&#xf…

线程同步--生产者消费者模型--单例模式线程池

文章目录 一.条件变量pthread线程库提供的条件变量操作 二.生产者消费者模型生产者消费者模型的高效性基于环形队列实现生产者消费者模型中的数据容器基于生产者消费者模型实现单例线程池 一.条件变量 条件变量是线程间共享的全局变量,线程间可以通过条件变量进行同步控制条件…

[已解决]前端使用el-upload,后端使用文件上传阿里云报错:异常信息:java.lang.NullPointerException: null

前端使用el-upload&#xff0c;后端使用文件上传阿里云报错&#xff1a; 报错原因&#xff1a;前端image参数未传进去 解决方法&#xff1a;在el-upload添加属性 name"image" 文件传进去了&#xff01;

Redis实战之-分布式锁-redission

一、分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如HashTable这样的代码中&#xff0c;他的方法都…

2.4 网络层03

2.4 网络层03 2.4.7 路由表 1、什么是路由&#xff1f; 路由就是报文从源端到目的端的路径。当报文从路由器到目的网段有多条路由可达时&#xff0c;路由器可以根据路由表中最佳路由进行转发。 2、什么是路由表&#xff1f; 在计算机网络中&#xff0c;路由表&#xff08…

关于java中的Super详解

关于java中的Super详解 我们在上一篇文章中了解到了面向对象三大基本特征&#xff0c;继承&#xff0c;我们本篇文章中来了解一下Super&#x1f600;。 一、Super和this调用属性 this&#xff1a;当前类中使用。super&#xff1a;父类使用。 我们直接用代码来说明一下。 1…

C#调用C++ dll异常排查

基本情况 最近在做的一款程序&#xff0c;长时间运行总会出现莫名的问题。有时是自动关闭&#xff0c;有时程序报错&#xff0c;有时调用的dll异常…… 提出假设——dll内存泄漏 由于开始与C组合作时&#xff0c;使用其提供的dll出现过数据读写时异常&#xff08;内存操作异常…

Python 面向对象绘图(Matplotlib篇-16)

Python 面向对象绘图(Matplotlib篇-16)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

[AutoSar]BSW_OS 05 Autosar OS_Alarms

目录 关键词平台说明一、Timer1.1 配置 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c;芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (GCC) >>>>>回到总目录<<<<<< 一…

kafka参数配置参考和优化建议 —— 筑梦之路

对于Kafka的优化&#xff0c;可以从以下几个方面进行思考和优化&#xff1a; 硬件优化&#xff1a;使用高性能的硬件设备&#xff0c;包括高速磁盘、大内存和高性能网络设备&#xff0c;以提高Kafka集群的整体性能。 配置优化&#xff1a;调整Kafka的配置参数&#xff0c;包括…

【GAMES101】Lecture 08 图形管线(实时渲染管线)与纹理映射

目录 图形管线 纹理映射 图形管线 给我一个三维模型&#xff0c;给我一个光照条件&#xff0c;我就能够得出渲染的结果&#xff0c;这些东西合起来就是Graphics Pipeline&#xff0c;图形管线&#xff0c;闫神愿称之为实时渲染管线&#xff0c;那下面这个流程图就是这个渲染…

MySQL缓冲池(Buffer Pool)深入解析:原理、组成及其在数据操作中的核心作用

在关系型数据库管理系统&#xff08;RDBMS&#xff09;中&#xff0c;性能优化一直是数据库管理员和开发者关注的焦点。作为最流行的开源RDBMS之一&#xff0c;MySQL提供了多种优化手段&#xff0c;其中InnoDB存储引擎的缓冲池&#xff08;Buffer Pool&#xff09;是最为关键的…

网络安全需要对网络风险有独特的理解

迷失在翻译中&#xff1a;网络风险解释的脱节现实 在古印度的一个经典故事中&#xff0c;几个蒙住眼睛的人接近一头大象&#xff0c;每个人检查不同的部位。有人触摸树干&#xff0c;认为它像一条蛇。另一个摸到了一条腿&#xff0c;认为它是一棵树。还有一个拿着象牙的人&…

C++大学教程(第九版)5.23星号组成的菱形图案 5.24修改星号组成的菱形图案

5.23题目 (星号组成的菱形图案)编写一个程序&#xff0c;打印以下的菱形图案。要求使用打印一个星号(*)、空格或者一个换行符的输出语句。尽量多用循环(使用嵌套 for 语句)&#xff0c;同时尽量减少输出语句的使用次数。 代码 #include <bits/stdc.h> using namespac…