web三、 window对象,延时器,定时器,时间戳,location对象(地址),本地存储-localStorage,数组去重new Set

 一、 window对象

  window对象 是一个全局对象,也可以说是JavaScript中的 顶级对象
  像document、alert()、console.log()这些都是window的属性,基本BOM的属性和方法都是window的
  所有通过 var定义 在全局作用域中的 变量 函数 都会变成window对象的属性和方法
  window对象下的属性和方法调用的时候可以 省略window

<body>
    <a href="./10-histroy对象.html">10跳转页面</a>

    <script>
        window.alert(`window自带的对象alert`) //输入语句也是window自带的对象

        //var定义的变量和function函数都是window对象的属性和方法,一般window省略不写
        console.log(name)

        var name = '小红'
        console.log(window.name) //没省略之前的



        function fn() {

            console.log(`函数`)

        }
        window.fn() //没省略之前的
    </script>
</body>

二、延时器

语法:setTimeout(回调函数,等待的毫秒数)

setTimeout仅仅只执行一次,所以可以理解为就是把一段代码延迟执行,平时省略window

清除延时器clearTimeout(timer-id值)

返回值是一个正整数,表示定时器的编号(唯一的id值)

<script>
        //延时器
        // setTimeout(函数,毫秒时间)
        //  set开启    clear关闭
        let timeid = setTimeout(() => {
                console.log('延时器执行的倒计时')

            }, 2000)
            // clearTimeout(延时器的id)
        clearTimeout(timeid) //关闭延时器
    </script>

三、定时器

可以每隔指定时间自动重复执行某些代码

setInterval(函数,间隔时间-毫秒单位)

注意:1.函数名字不需要加括号 2.定时器返回的是一个id数字

<body>
    <button class="btn1">开启定时器</button>
    <button class="btn2">关闭定时器</button>

    <script>
        let timer = null //定义全局的变量储存定时器的id值

        const btn1 = document.querySelector(".btn1")
        const btn2 = document.querySelector(".btn2")

        btn1.addEventListener('click', function() {
            //setInterval(函数,毫秒为单位时间)
            // 防抖--·开启一个定时器之前,·关掉之前的定时器
            clearInterval(timer)
            timer = setInterval(function() {
                console.log(`间隔执行的定时器`)

            }, 3000)
        })

        btn2.addEventListener('click', function() {
            //clearInterval(定时器的id)
            clearInterval(timer)
        })
    </script>
</body>

三、时间戳

时间戳:  是指1970年01月01日00时00分00秒起至现在的 总毫秒数(数字型)
算法:
将来的时间戳 - 现在的时间戳 = 剩余时间毫秒数
  剩余时间毫秒数 转换 年月日时分秒 就是倒计时时间

转换公式

h = parseInt(总秒数 / 60 / 60 % 24)    计算小时

m = parseInt(总秒数 / 60 % 60)         计算分数

s = parseInt(总秒数 % 60)              计算当前秒数

获取时间戳的三种方式

date.getTime()
+new Date0  使用较为简单
Date.now( )

 <script>
        // 获取时间戳的三种方式

        /**1获取的是从1970年到现在的时间戳----
         * 小括号里可以写从1970年到指定的某年某月的时间,显示的是国际的时间,
         * 前面加一个+转换为毫秒*/
        const date = new Date()
        const date1 = new Date('2022-2-2 12:00')
        console.log(`从1970年到2022-2-2 12:00`, date1) //获得的是国际时间
        console.log(+new Date()) // 获得的是国际时间---前面加+转化为毫秒

        
        console.log(`日期对象来调用`, date.getTime()) //2日期对象来调用


        Date.now() //3 获取的是当前的时间
    </script>

四、location对象

location (地址) 拆分并保存 URL 地址 的各个 组成 部分, 它是一个 对象
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!--提交表单跳转  -->
    <form action="">
        <input type="text" name="username">
        <input type="text" name="userage">
        <button>提交</button>
    </form>

    <a href="#/music">音乐</a>

    <button class="btn">刷新</button>

    <script>
        //location (地址) 它拆分并保存了 URL 地址的各个组成部分, 它是一个对象
        // 常用属性和方法:

        console.log(location)

        // //跳转地址 location.href 
        // location.href = 'http://www.baidu.com' //百度的地址,自动跳的

        const form = document.querySelector('form')

        //表单点按钮可以触发提交事件→submit
        form.addEventListener('submit', function(e) {

            //拿路径中?后面的--查询参数location.search
            console.log('URL' + location.search)
                //  e.preventDefault() //事件对象中的阻止默认行为
        })

        const a = document.querySelector('a')
        a.addEventListener('click', function() {
            // 获取#后面  Location.hash
            console.log(location.hash)

        })


        //  用来刷新当前页面reload( )
        const btn = document.querySelector('.btn')
        btn.addEventListener('click', function() {
            location.reload()
        })
    </script>
</body>

</html>

五、navigator对象(了解即可)

  navigator 对象 ,该对象下记录了 浏览器自身的相关信息
常用属性和方法:
  通过 userAgent 检测浏览器的版本及平台

六、 histroy对象(了解即可)

history (历史)是对象,主要管理历史记录,该对象与浏览器地址栏的操作相对应,如前进、后退

history对象一般在实际开发中比较少用,但是会在一些OA 办公系统中见到。

<!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>histroy对象</title>
</head>

<body>
    <button class="back">←后退</button>
    <button class="forward">前进→</button>
    <script>
        const back = document.querySelector("back")
        back.addEventListener('click', function() {
            // history (历史)是对象,主要管理历史记录,
            //history.back() //可以后退功能
            // forward()前进功能,
            history.go(-1) //前进后退功能参数如果是1前进1个页面如果是-1后退1个页面
        })
    </script>
</body>

</html>

 七、存储-localStorage(重点)

本地存储:作用:数据可以长期保留在本地浏览器中,刷新页面和关闭页面,数据也不会丢失,

键值对的形式存储,本地只能存储字符串,无法存储复杂数据类型

存储数据localStorage.setltem(key, value)

读取数据localStorage.getltem(key)

删除数据localStorage.removeltem(key)

1、基础数据类型的存取

<body>
    <script>
        //存储数据
        // setItem(自定义的key名,存储的数据)
        localStorage.setItem('name', '小红')
        localStorage.setItem('name', '小李')
            // 获取数据
            // getItem(需要获取的数据的key名)
        let num = localStorage.getItem('name')
        console.log(num) //小李,同名储存数据,会覆盖

        // 删除数据
        // localStorage.removeItem('name')
    </script>
</body>

2、复杂数据类型的存取

存储复杂数据类型:

本地只能存储字符串,无法存储复杂数据类型,要将复杂数据类型转换成JSON字符串,在存储到本地。语法:JSON.stringify(复杂数据类型)

属性名使用双引号引起来不能单引号属性值如果是字符串型也必须双引号

读取复杂数据类型:

因为本地存储里面取出来的是字符串,不是对象,无法直接使用

所以要把取出来的字符串转换为对象。语法:JSON.parse(JSON字符串)

 <script>
        // 1.基本类型- 直接写数据存储
        // 2,复杂类型
        //存:先JSON.stringify转成JSON格式的字符串
        // 取: JsON.parse 转回原有复杂类型
        const pig = {
                name: '佩奇',
                age: 5
            }
            //存储复杂类型的数据先转成JSON格式的字符串---"name":“佩奇”--格式的字符串的引号都是双引号
            // console.log(JsoN.stringify(pig))
        localStorage.setItem('zhu', pig)
        console.log(localStorage.getItem('zhu')) //object

        console.log('zhu', JSON.stringify(pig))

        // 想要用对象转换 JSON.parse把json格式的字符串转回复杂类型

        const newObj = JSON.parse(localStorage.getItem('zhu'))
        console.log(newObj)
    </script>

八、存储sessionStorage(了解)

用法跟localStorage 基本相同

区别是:当页面浏览器被关闭时,存储在sessionStorage的数据会被清除

存储:sessionStorage.setltem(key,value)
 

获取:sessionStorage.getltem(key)
 

删除:sessionStorage.removeltem(key)

九、数组去重new Set(数组)

 <script>
        // 不允许包含重复元素
        // const s = new Set()

        // s.add(1)
        // s.add(10)
        // s.add(100)
        // s.add(10)

        // s.delete(100)


        // console.log(s)

        const arr = [10, 20, 30, 40, 50, 20, ]
            // 数组去重,转集合{}--→再转回数组(...展开运算)
        let s = new Set(arr)
        console.log(s)
            // console.log([...new Set(arr)])
        console.log([...s])
    </script>

十、案例

1.(距离xx时间的倒计时)

<body>
    <div class="countdown">
        <p class="next">今天是2024年11月25日</p>
        <p class="title">下班倒计时</p>
        <p class="clock">
            <span id="hour">00</span>
            <i>:</i>
            <span id="minutes">25</span>
            <i>:</i>
            <span id="second">20</span>
        </p>
        <p class="tips">18:30:00下课</p>
    </div>
    <script>
        // 倒计时案例 当前距离  2023年1月28日 18:30 还剩多少时间

        //  转换公式
        //  h = parseInt(总秒数 / 60 / 60 % 24)   //   计算小时
        //  m = parseInt(总秒数 / 60 % 60)        //   计算分数
        //  s = parseInt(总秒数 % 60)             //   计算当前秒数
        // ---------------------------------------------------------
        //晚上6:30的时间戳-现在的时间戳剩的毫秒数转时分秒  

        // 思路:每隔一秒执行一次,代码放到setInterval里面
        //未来时间-现在时间     →转秒数→转时分秒→写入到html页面
        function fn() {
            let end = +new Date('2024-11-25 18:00:00') //结束时间
            let now = Date.now() //现在的时间
            let res = (end - now) / 1000


            h = parseInt(res / 60 / 60 % 24)
            h = h < 10 ? '0' + h : h
            m = parseInt(res / 60 % 60)
            m = m < 10 ? '0' + m : m
            s = parseInt(res % 60)
            s = s < 10 ? '0' + s : s

            document.querySelector('#hour').innerHTML = h
            document.querySelector('#minutes').innerHTML = m
            document.querySelector('#second').innerHTML = s
        }
        fn()
        setInterval(fn, 1000)
    </script>

2.bilibili搜索页面(本地储存)

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./iconfonts/iconfont.css">
    <link rel="stylesheet" href="./css/search.css">
</head>

<body>
    <div class="m-search">
        <div class="form">
            <i class="iconfont icon-search"></i>
            <input type="text" placeholder="凡人修仙传" class="search-input">
            <i class="iconfont icon-guanbi"></i>
        </div>
        <a href="javascript:void(0);" class="cancel">取消</a>
    </div>
    <div class="search-hot">
        <h2>大家都在搜</h2>
        <div class="list">
            <span class="hotword-item">开学前一天的中国速度</span>
            <span class="hotword-item">LOL新英雄大招全图范围</span>
            <span class="hotword-item">央视曝光飙车炸街产业链</span>
        </div>
    </div>
    <div class="gap"></div>
    <div class="history">
        <h2>历史搜索</h2>
        <ul>
            <!-- 
        <li>
          <i class="iconfont icon-lishijilu_o"></i>
          <span>凡人修仙传</span>
        </li>
      -->
        </ul>
        <div class="clear-history">
            <a href="javascript:void(0);" class="clear">清除历史记录</a>
        </div>
    </div>

    <!-- 搜索列表展示 -->
    <ul class="recommend-list hide">
        <li class="list-item">xxxx</li>
    </ul>

    <script>
        // /用户回车发布历史记录--页面添加1i标签
        //准备一个数组,用户回车往数组里面新增数据,根据数组数据的个数渲染li标签
        // let arr = ["a", "b"]

        // JSON.parse

        let arr = JSON.parse(localStorage.getItem('history')) || []

        //渲染的功能用户回车就要使用→封装一个函数→有参数(数组数据是可变的,将来数据变,li标签也要变)
        function render(data = []) {
            let str = data.map(item => {
                return `
                   <li>
                      <i class="iconfont icon-lishijilu_o"></i>
                     <span>${item}</span>
                  </li>
              `
            }).join('')
            document.querySelector('.history ul').innerHTML = str
        }
        render(arr)
            //用户如果按下的是回车键Enter,获取用户输入的数据放到arr(前追加unshift)
        const inp = document.querySelector('.search-input')
        inp.addEventListener('keyup', function(e) {
                if (e.key == 'Enter') {
                    //如果用户输入的是空的或有空格都不能发布
                    if (inp.value.trim() == '') {
                        alert('请输入内容:')
                        return
                    }
                    arr.unshift(inp.value)
                        // 添加完数据后,去重集合
                    arr = [...new Set(arr)]
                        // 去重之后,存储到localstorage
                    localStorage.setItem('history', JSON.stringify(arr))
                    render(arr)
                    inp.value = ''
                }
            })
            // 清除内容
            // 清空-localstorage要清除--保证刷新的不能是旧数据;本地js中的arr也要清除,这次渲染的是arr是空的
        const clear = document.querySelector('.clear-history a')
        clear.addEventListener('click', function() {
            arr = []
            localStorage.removeItem('history')
            render(arr)
        })

        // 使用localstorage流程:默认数据提取本地存储localstorage→使用→如果js中数据变化了,就要往本地存储localstorage里面存一次
        // 如果涉及到清空→localstorage里面的要清空;js中的数据也要清空
    </script>


</body>

</html>

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

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

相关文章

【AI系统】昇腾异构计算架构 CANN

昇腾异构计算架构 CANN 本文将介绍昇腾 AI 异构计算架构 CANN&#xff08;Compute Architecture for Neural Networks&#xff09;&#xff0c;这是一套为高性能神经网络计算需求专门设计和优化的架构。CANN 包括硬件层面的达芬奇架构和软件层面的全栈支持&#xff0c;旨在提供…

Spark和MapReduce场景应用和区别

文章目录 Spark和MapReduce场景应用和区别一、引言二、MapReduce和Spark的应用场景1. MapReduce的应用场景2. Spark的应用场景 三、MapReduce和Spark的区别1. 内存使用和性能2. 编程模型和易用性3. 实时计算支持 四、使用示例1. MapReduce代码示例2. Spark代码示例 五、总结 Sp…

CSS函数

目录 一、背景 二、函数的概念 1. var()函数 2、calc()函数 三、总结 一、背景 今天我们就来说一说&#xff0c;常用的两个css自定义属性&#xff0c;也称为css函数。本文中就成为css函数。先来看一下官方对其的定义。 自定义属性&#xff08;有时候也被称作CSS 变量或者级…

【C语言】递归的内存占用过程

递归 递归是函数调用自身的一种编程技术。在C语言中&#xff0c;递归的实现会占用内存栈&#xff08;Call Stack&#xff09;&#xff0c;每次递归调用都会在栈上分配一个新的 “栈帧&#xff08;Stack Frame&#xff09;”&#xff0c;用于存储本次调用的函数局部变量、返回地…

大数据新视界 -- 大数据大厂之 Hive 数据压缩算法对比与选择(下)(20 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【golang】单元测试,以及出现undefined时的解决方案

单元测试 要对某一方法进行测试时&#xff0c;例如如下这一简单减法函数&#xff0c;选中函数名后右键->转到->测试 1&#xff09;Empty test file 就是一个空文件&#xff0c;我们可以自己写测试的逻辑 但是直接点绿色箭头运行会出问题&#xff1a; 找不到包。我们要在…

ETL工具观察:ETLCloud与MDM是什么关系?

一、什么是ETLCloud ETLCloud数据中台是一款高时效的数据集成平台&#xff0c;专注于解决大数据量和高合规要求环境下的数据集成需求。 工具特点 1.离线与实时集成&#xff1a;支持离线数据集成&#xff08;ETL、ELT&#xff09;和变更数据捕获&#xff08;CDC&#xff09;实…

人形机器人训练、机器臂远程操控、VR游戏交互、影视动画制作,一副手套全部解决!

广州虚拟动力基于自研技术推出了多节点mHand Pro动捕数据手套&#xff0c;其最大的特点就是功能集成与高精度捕捉&#xff0c;可以用于人形机器人训练、机器臂远程操控、VR游戏交互、影视动画制作等多种场景。 一、人形机器人训练 mHand Pro动捕数据手套双手共装配16个9轴惯性…

IDL学习笔记(二)IDL处理卫星数据

IDL处理卫星数据 HDF文件数据集属性通用属性 常用HDF4操作函数常用的HDF5操作函数读取HDF文件的一般步骤 HDF4文件读取-----数据信息查询HDF4文件读取示例-----目标数据TIFF输出提取modis产品中数据&#xff0c;与某一点经纬度最接近的点有效结果&#xff0c;并按每行内容为日期…

动态规划-----路径问题

动态规划-----路径问题 下降最小路径和1&#xff1a;状态表示2&#xff1a;状态转移方程3 初始化4 填表顺序5 返回值6 代码实现 总结&#xff1a; 下降最小路径和 1&#xff1a;状态表示 假设&#xff1a;用dp[i][j]表示&#xff1a;到达[i,j]的最小路径 2&#xff1a;状态转…

Redis+Caffeine 多级缓存数据一致性解决方案

RedisCaffeine 多级缓存数据一致性解决方案 背景 之前写过一篇文章RedisCaffeine 实现两级缓存实战&#xff0c;文章提到了两级缓存RedisCaffeine可以解决缓存雪等问题也可以提高接口的性能&#xff0c;但是可能会出现缓存一致性问题。如果数据频繁的变更&#xff0c;可能会导…

2024年大热,Access平替升级方案,也适合Excel用户

欢迎各位看官&#xff0c;您来了&#xff0c;就对了&#xff01; 您多半是Access忠实粉丝&#xff0c;至少是excel用户&#xff0c;亦或是WPS用户吧。那就对了&#xff0c;今天的分享肯定对您有用。 本文1100字&#xff0c;阅读时长2分50秒&#xff01; 现实总是不尽人意&am…

解决idea使用maven打包时无法将本地lib库文件和resource目录中的资源文件打包进jar文件的问题!!!

一、问题复现 1&#xff09;项目结构如下 我们看到项目中手动添加了本地lib资源&#xff0c;同时bootspring的配置文件和mapper文件也放在了resouces目录中。 2&#xff09;上述结构的项目在使用maven打包时&#xff0c;最终生成的jar文件中将不包含lib库文件&#xff0c;甚…

PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型

PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型 目录 PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模…

FPGA实战篇(呼吸灯实验)

1.呼吸灯简介 呼吸灯采用 PWM 的方式&#xff0c;在固定的频率下&#xff0c;通过调整占空比的方式来控制 LED 灯亮度的变化。 PWM&#xff08;Pulse Width Modulation &#xff09;&#xff0c;即脉冲宽度调制&#xff0c;它利用微处理器输出的 PWM 信号&#xff0c;实现对…

家政小程序开发,打造便捷家政生活小程序

目前&#xff0c;随着社会人就老龄化和生活压力的加重&#xff0c;家政服务市场的需求正在不断上升&#xff0c;家政市场的规模也正在逐渐扩大&#xff0c;发展前景可观。 在市场快速发展的影响下&#xff0c;越来越多的企业开始进入到市场中&#xff0c;同时家政市场布局也发…

《Python基础》之Pandas库

目录 一、简介 二、Pandas的核心数据结构 1、Series 2、DataFrame 三、数据读取与写入 1、数据读取 2、数据写入 四、数据清洗与处理 1、处理缺失值 2、处理重复值 3、数据转换 五、数据分析与可视化 1、统计描述 2、分组聚合 3、数据可视化 六、高级技巧 1、时…

Elasticsearch在liunx 中单机部署

下载配置 1、下载 官网下载地址 2、上传解压 tar -zxvf elasticsearch-XXX.tar.gz 3、新建组和用户 &#xff08;elasticsearch 默认不允许root账户&#xff09; #创建组 es groupadd es #新建用户 useradd ryzhang -g es 4、更改文件夹的用户权限 chown -R ryzhang …

基于 MVC 的 SpringBoot 高校行政事务管理系统:设计思路与实现步骤详解

2系统开发环境 2.1vue技术 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第…

不敢相信,Nginx 还能这么玩?

大家好&#xff0c;我是程序员鱼皮。今天来聊聊 Nginx 技术&#xff0c;这是一个企业项目必用&#xff0c;但是却经常被程序员忽略的技术。学好 Nginx&#xff0c;可以助你在求职中脱颖而出。 或许你会想&#xff1a;“Nginx 不就是用来部署网站的服务器嘛&#xff1f;这有何难…