WEB APIs (5)

window对象

BOM(浏览器对象模型)

其为js操作浏览器提供了方法

window对象是一个全局变量,是BOM树根节点

BOM的属性和方法都是window的,如document、console.log()等

var定义在全局全局作用域中的变量、函数都会变成window对象属性和方法

定时器-延时函数

js内置让代码延迟执行的函数,setTimeout

语法:

setTimeout(回调函数,等待毫秒数)

仅执行一次

setTimeout返回的也是id

清除延时函数:

例子:广告自动消失

1.设置延时函数

2.隐藏元素

js执行机制

js一大特点只能是单线程;同一时间只能干一件事

js允许多线程(通过浏览器处理),因此出现同步与异步

同步任务

在主线程上执行,形成一个执行栈

异步任务

通过回调函数实现

三种类型:

普通事件,click、resize等

资源加载,load,error等

定时器,setInterval,setTimeout等

异步任务相关添加到任务队列

主线程执行完毕,查询任务队列,取出一个任务,推入主线程处理,重复动作

由于主线程不断地重复获得任务、执行任务,再获得任务、执行任务这种机制成为事件循环(event loop)

location对象

数据类型是对象,拆分并保存URL地址的各个组成部分

常用属性:

location.href属性获取完整的URL地址,对其赋值进行页面跳转

location.search属性获取地址中携带的参数,?后面部分

location.hash属性获取地址中携带的哈希值,#后面部分

常用于不刷新页面,显示不同页面

location.reload()用于刷新页面,location.reload(true)表示强制刷新

navigator对象

记录浏览器自身相关信息

属性方法

通过userAgent检测浏览器版本及平台

跳转的代码!

//检测userAgent(浏览器信息)

(function){
const userAgent= navigator.userAgent
//验证是否为Android或iPhone
const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
//如果是Android或Phone,则跳转至移动站点
if (android || iphone){
location.href = 'http://m.itcast.cn'
}
})();

history对象

主要管理历史纪录,该对象与浏览器地址栏的操作相对应,前进、后退、历史记录等。

history.back()<=>退后

history.forward()<=>前进

history.go(n)<=>前进n个页面

本地存储

数据储存在用户浏览器中,刷新不会丢失(永久性)

特性:

可以多窗口共享(同一浏览器)

以键值对形式存储使用

本地存储得到的只能是字符串

语法:

存储数据

localStorage.setItem('key',value)

添加会在其中显示

获取数据

localStorage.getItem('key')

删除数据

localStorage.removeItem('key')

改数据

只需要再写一遍localStorage.setItem('key',value)  改变value值即可

本地存储处理复杂数据类型

本地只能储存字符型,无法储存复杂数据类型

需要将复杂数据类型转化成JSON字符串,在储存到本地

语法:

JSON.stringfy()

JSON.parse()

将JSON字符串转换为对象

数组的map以及join方法

map(也称映射)遍历数组,处理数据,返回新的数组

数组join方法,将数组转化为字符串

参数是什么就用什么隔开

特殊的:

本地储存的案例:

涉及表单提交中 bottom与submit的关系

submit:默认form提交

bottom:响应用户自定义事件(可以监听)

<!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, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">

  <title>~</title>

  <link rel="shortcut icon" href="https://www.bilibili.com/favicon.ico">
  <link rel="stylesheet" href="css/初始化表.css">
  <meta name="keywords" content="..." />

  <style>
    /*写代码时始终要考虑权重问题!*/
    @font-face {
      font-family: 'icomoon';
      src: url('fonts/icomoon.eot?au9n7q');
      src: url('fonts/icomoon.eot?au9n7q#iefix') format('embedded-opentype'),
        url('fonts/icomoon.ttf?au9n7q') format('truetype'),
        url('fonts/icomoon.woff?au9n7q') format('woff'),
        url('fonts/icomoon.svg?au9n7q#icomoon') format('svg');
      font-weight: normal;
      font-style: normal;
      font-display: block;
    }

    .box {
      width: 1000px;
      height: 100%;
      margin: 100px auto;
      text-align: center;
    }

    h1 {
      margin: 40px;
    }

    h2 {
      margin-top: 40px;
    }

    input {
      width: 70px;
    }

    button {
      margin-left: 10px;
      background-color: #451af1;
      color: #fff;
      border-radius: 4px;
    }

    table {
      margin: 0 auto;
      border: #c8c7ca;
      width: 600px;
    }

    td {
      padding: 5px;
    }

    thead {
      background-color: #88cbf6;
      font-size: 14px;
    }

    a {
      color: white;
      display: inline-block;
      width: 45px;
      height: 15px;
      line-height: 15px;
      background-color: #eb6e07;
      cursor: pointer;
    }

    .title {
      width: 600px;
      height: 30px;
      line-height: 30px;
      padding-right: 15px;
      margin: 10px auto;
      text-align: right;
    }

    .title span {
      display: inline-block;
      color: #f26934;

    }
  </style>
</head>

<body>
  <div class="box">
    <h1>新增学员</h1>
    <form class="info" autocomplete="off">
      姓名:
      <input type="text" class="uname" name="uname">
      年龄:
      <input type="text" class="age" name="age">
      性别:
      <input type="text" class="sex" name="sex">
      薪资:
      <input type="text" class="salary" name="salary">
      就业城市:
      <select class="city" name="city">
        <option value="北京">北京</option>
        <option value="上海">上海</option>
        <option value="广州">广州</option>
        <option value="深圳">深圳</option>
        <option value="成都">成都</option>
      </select>
      <button class="add">录入</button>
    </form>
    <h2>就业榜</h2>
    <div class="title">
      共有数据<span>0</span>条
    </div>
    <table border="1" align="center" cellpadding="0" cellspacing="0">
      <thead>
        <tr>
          <td>学号</td>
          <td>姓名</td>
          <td>年龄</td>
          <td>性别</td>
          <td>薪资</td>
          <td>就业城市</td>
          <td>操作</td>
        </tr>
      </thead>

      <tbody>

      </tbody>
    </table>
  </div>

  <script>
    const info = document.querySelector('.info')
    const uname = document.querySelector('.uname')
    const age = document.querySelector('.age')
    const sex = document.querySelector('.sex')
    const salary = document.querySelector('.salary')
    const city = document.querySelector('.city')
    const button = document.querySelector('.add')
    const number = document.querySelector('.title span')
    const tbody = document.querySelector('tbody')
    const names = document.querySelectorAll('[name]')

    const arr = []

    function render() {

      const arr1 = arr.map((item,index) => {
        return `
        <tr>
          <td>${item.Id}</td>
          <td>${item.uname}</td>
          <td>${item.age}</td>
          <td>${item.sex}</td>
          <td>${item.salary}</td>
          <td>${item.city}</td>
          <td><a href="javascript:" data-id=${index}>delete</a></td>
        </tr>
        `
      })
      tbody.innerHTML = arr1.join('')
      number.innerHTML = arr1.length
    }

    info.addEventListener('submit', function (e) {
      e.preventDefault()
      for (let i = 0; i < names.length; i++) {
        if (names[i].value === '') {
          return alert('数据不能为空!')
        }
      }
      arr.push({
        Id: arr.length,
        uname: uname.value,
        age: age.value,
        sex: sex.value,
        salary: salary.value,
        city: city.value,
        time: new Date().toDateString()
      })

      render()
      this.reset()
      localStorage.setItem('data', JSON.stringify(arr))
    })

    tbody.addEventListener('click',function(e){
      if (e.target.tagName==='A' && confirm('是否删除?'))
      {
        arr.splice(e.target.dataset.id,1)
        render()
        localStorage.setItem('data', JSON.stringify(arr))
      }
    })

  </script>

</body>

</html>

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

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

相关文章

138.乐理基础-等音、等音程的意义

上一个内容&#xff1a;137.乐理基础-协和音程、不协和音程 上一个内容里练习的答案&#xff1a; 等音、等音程的意义&#xff0c;首先在 19.音阶 里写了&#xff0c;一个调使用的音阶应当是从主音快开始&#xff0c;以阶梯状的形式进行到主音结束&#xff0c;这样才能明显从乐…

VMware Workstation Pro 17 虚拟机软件安装教程

VMware软件介绍 VMware Workstation是一款功能强大的桌面虚拟计算机软件&#xff0c;提供用户可在宿主机操作系统上同时运行不同的操作系统(虚拟化技术)&#xff0c;所运行的操作系统可方便的进行复制和移动&#xff0c;突破传统架构的限制。本文将以VMware Workstation Pro 1…

tomcat 反向代理 自建博客 修改状态页 等

一 自建博客 随后&#xff0c;拷贝到webapps下面 并且做软连接 随后重定向 并且下载 cat >/etc/yum.repos.d/mysql.repo <<EOF [mysql57-community] nameMySQL 5.7 Community Server baseurlhttp://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/ enabled1 g…

excel中如何使用VLOOKUP和EXACT函数实现区分大小写匹配数据

在 Excel 中&#xff0c;VLOOKUP 函数默认情况下是不区分大小写的&#xff1a; 比如下面的案例&#xff0c;直接使用VLOOKUP函数搜索&#xff0c;只会搜索匹配到不区分大小写的第一个 如果我们想要实现区分大小写的精确匹配&#xff0c;可以使用 EXACT 函数结合 VLOOKUP 函数 …

openGauss学习笔记-234 openGauss性能调优-系统调优-资源负载管理-资源管理准备-设置控制组

文章目录 openGauss学习笔记-234 openGauss性能调优-系统调优-资源负载管理-资源管理准备-设置控制组234.1 背景信息234.2 前提条件234.3 操作步骤234.3.1 创建子Class控制组和Workload控制组234.3.2 更新控制组的资源配额234.3.3 删除控制组 234.4 查看控制组的信息 openGauss…

QT Mingw32/64编译ffmpeg源码生成32/64bit库以及测试

文章目录 前言下载msys2ysamFFmpeg 搭建编译环境安装msys2安装QT Mingw编译器到msys环境中安装ysam测试 编译FFmpeg测试 前言 FFmpeg不像VLC有支持QT的库文件&#xff0c;它仅提供源码&#xff0c;需要使用者自行编译成对应的库&#xff0c;当使用QTFFmpeg实现播放视频以及视频…

知识图谱1——neo4j

2024年要搞知识图谱&#xff0c;因此没有办法&#xff0c;只能将我之前固守的JDK1.8&#xff0c;升级到JDK21&#xff0c;因为JDK21也是LTS版本&#xff0c;neo4j高版本就不支持JDK8&#xff0c;因此没有办法&#xff0c;只有升级了。写这篇只是一个搭建笔记&#xff0c;我的初…

随机生成验证码

随机生成验证码 需求&#xff1a;随机生成一个任意位的验证码包含数字、大写字母和小写字母 1.代码实现 package com.ham;import java.util.Random;public class case2 {public static void main(String[] args) {System.out.println(code(4));}public static String code(i…

深入了解Java虚拟机(JVM)

Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心组件&#xff0c;它负责解释执行Java字节码&#xff0c;并在各种平台上执行。JVM的设计使得Java具有跨平台性&#xff0c;开发人员只需编写一次代码&#xff0c;就可以在任何支持Java的系统上运行。我们刚开始学习Ja…

考研数学——高数:微分方程

一、一阶线性微分方程 两种形式&#xff1a; 非齐次&#xff1a; 齐次&#xff1a; 推导过程 推导公式的过程一般由特殊到一般&#xff1a;所以先求解齐次方程的解 &#xff08;然后对等式两边同时积分&#xff09; 再来求非齐次方程的解&#xff0c;由…

小程序图形:echarts-weixin 入门使用

去官网下载整个项目&#xff1a; https://github.com/ecomfe/echarts-for-weixin 拷贝ec-canvs文件夹到小程序里面 index.js里面的写法 import * as echarts from "../../components/ec-canvas/echarts" const app getApp(); function initChart(canvas, width, h…

[数据结构]栈

1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈&#xff1a;栈的插入操作叫做进栈/压栈/入栈&#…

XUbuntu22.04之显示实时网速(二百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

差分题练习(区间更新)

一、差分的特点和原理 对于一个数组a[]&#xff0c;差分数组diff[]的定义是: 对差分数组做前缀和可以还原为原数组: 利用差分数组可以实现快速的区间修改&#xff0c;下面是将区间[l, r]都加上x的方法: diff[l] x; diff[r 1] - x;在修改完成后&#xff0c;需要做前缀和恢复…

C++_红黑树

目录 1、红黑树的规则 2、红黑树节点的定义 3、红黑树插入节点的调整操作 3.1 情况一 3.2 情况二 3.3 情况三 4、红黑树的实现 结语 前言&#xff1a; 在C中&#xff0c;红黑树是二叉搜索树的另一种优化版本&#xff0c;他与AVL树的区别在于保持树的平衡方式不同&…

Unity游戏输入系统(新版+旧版)

使用新版还是旧版 旧版 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c5 : MonoBehaviour {void Start(){}void Update(){// 注意要在游戏中 点鼠标键盘进行测试// 鼠标// 0左键 1右键 2滚轮if (Input.GetMouseButtonDown(0)…

Java二叉树(1)

&#x1f435;本篇文章将对二叉树的相关概念、性质和遍历等知识进行讲解 一、什么是树 在讲二叉树之前&#xff0c;先了解一下什么是树&#xff1a;树是一种非线性结构&#xff0c;其由许多节点和子节点组成&#xff0c;整体形状如一颗倒挂的树&#xff0c;比如下图&#xff1…

基于springboot+vue的党员教育和管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Springboot+vue的制造装备物联及生产管理ERP系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的制造装备物联及生产管理ERP系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的制造装备物联及生产管理ERP系统&#xff0c;采用M&#xff…

C++ opencv 学习

文章目录 1、创建窗口2、读取图片3、视频采集4、Mat的使用5、异或操作6、通道分离&#xff0c;通道合并7、色彩空间转换8、最大值、最小值9、绘制图像10、多边形绘制11、随机数12、鼠标实时绘制矩形13、归一化14、resize操作15、旋转翻转16、视频操作17、模糊操作18、高斯模糊操…