JavaScript的第十天

目录

一、BOM的顶级对象

二、windows的常见事件

        1、window.onload:延迟加载器

        2、DOMContentLoaded

        3、 window.onresize 和 window.innerWidth

三、定时器

        1、setTimeout

        定义一个单次使用自动关闭的程序

        

        2、setIntval

         倒计时效果

        3、清除定时器:clearTimeout()/ clearInterval()

4、发送短信案例

四、不同的存储方式 

        1、会话存储:sessionStorage

2、本地存储:localStorage

记录用户名案例


一、BOM的顶级对象

        BOM:浏览器对象模型(browser object model),其核心对象是window。

        所有获取元素的方式都是省略window前缀,

        window.document.querySelector("div")

        var a = 5
        console.log(window.a);

        function fn() {
            console.log(this);
        }

        window.fn()

        document.body.addEventListener("click", function () {

        })

        window.addEventListener("click", function () {
            console.log(1);
        })

二、windows的常见事件

        1、window.onload:延迟加载器

                会将js延迟加载,延迟到dom节点,图片,flash,css等加载完之后再执行

                load:等页面内容全部加载完毕,包含页面dom元素,图片,flash,css等等

    window.addEventListener("load",function()
    {
        var btn =document.querySelector("button")
        console.log(1);
    )
    //在头部插入script标签时,因为代码的加载顺序问题会导致事件无法进行
    //但是在事件外部套入一个load延迟加载可以使js文件的加载顺序发生改变
    //即完成body的加载后再执行

        2、DOMContentLoaded

               DOMContentLoaded是DOM 加载完毕,不包含图片、falsh、css、等就可以执行,加载速度比 load更快一些,因为不需要加载图片,flash,css等所以会比window.onload先执行

        window.addEventListener("DOMContentLoaded", function () {
            var btn = document.querySelector("button")
            console.log(2);
        })

        3、 window.onresize 和 window.innerWidth

                window.onresize是用来监听窗口变化的事件,window.innerWidth是用来做获取浏览器BOM宽度的

        var div = document.querySelector("div")
        window.addEventListener("resize", function () {
            console.log(window.innerWidth);
            if (window.innerWidth < 1000) div.style.display = "none"
            else div.style.display = "block"
        })

三、定时器

        1、setTimeout

                使用方法:window.setTimeout(调用函数, 延时时间)

        1. 这个window在调用的时候可以省略

        2. 这个延时时间单位是毫秒 但是可以省略,如果省略默认的是0

        3. 这个调用函数可以直接写函数还可以写函数名,还有一个写法:'函数名()'

        4. 页面中可能有很多的定时器,我们经常给定时器加标识符 (名字),即用变量并赋值去代替函数

        setTimeout(function () {
            //事件处理程序
          console.log(this);

        }, 时间)

        //this指向window  
        //该定时器只触发一次,触发结束和直接结束,
        //事件处理程序的运行会存在内存中,需要手动清理

        setTimeout(function ()
        {
            console.log(this);
        }, 1000)

        定义一个单次使用自动关闭的程序

                在下列代码中,使用setTimeout的单次结束即结束特性完成一个3000毫秒定时的程序,在完成定时后将图片的属性设置为none即可完成隐藏。

        var img = document.querySelector("img")
        setTimeout(function () {
            img.style.display = "none"
        }, 3000)

        

        2、setIntval

                        使用方法:window.setInterval(调用函数, 延时时间);

        每隔这个延时时间,就去调用这个回调函数,再没有清除计数器或限制条件的情况下会重复调用这个函数。

        var num = 10
        var timer = setInterval(function () {
            console.log(++num);
        }, 1000)

         倒计时效果

<!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>Document</title>
    <style>
        div {
            margin: 200px;
        }

        span {
            display: inline-block;
            width: 40px;
            height: 40px;
            background-color: #333;
            font-size: 20px;
            color: #fff;
            text-align: center;
            line-height: 40px;
        }
    </style>
</head>

<body>
    <div>
        <span class="hour">1</span>
        <span class="minute">2</span>
        <span class="second">3</span>
    </div>
    <script>
        function getTime(future) {
            var time = +new Date(future)
            var now = +new Date()
            var temp = (time - now) / 1000
            var h = Math.floor(temp / 60 / 60)
            h = h >= 10 ? h : "0" + h
            var m = Math.floor(temp / 60 % 60)
            m = m >= 10 ? m : "0" + m
            var s = Math.floor(temp % 60)
            s = s >= 10 ? s : "0" + s
            return [h, m, s]
        }
        var spans = document.querySelectorAll("span")
        var arr = getTime("2024/10/29")
        for (var i = 0; i < spans.length; i++) {
            spans[i].innerHTML = arr[i]
        }
        setInterval(function () {
            var arr = getTime("2024/10/29")
            for (var i = 0; i < spans.length; i++) {
                spans[i].innerHTML = arr[i]
            }
        }, 1000)
    </script>
</body>

</html

        3、清除定时器:clearTimeout()/ clearInterval()

                使用 “clear+定时器” 的组合来清除定时器,在清除Timeout时会停止计时器的运行。

                而在clearInterval中会停止定时器的循环和继续运行,即可以理解为停止一个无限循环。

    btn.onclick = function () {
      clearTimeout(timer)
    }


    stop.addEventListener("click", function () {
       clearInterval(timer)
     })

4、发送短信案例

<!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>Document</title>
</head>

<body>
    手机号码: <input type="number"> <button>发送</button>
    <script>
        // 按钮点击之后,会禁用 disabled 为true 
        // 同时按钮里面的内容会变化, 注意 button 里面的内容通过 innerHTML修改
        // 里面秒数是有变化的,因此需要用到定时器
        // 定义一个变量,在定时器里面,不断递减
        // 如果变量为0 说明到了时间,我们需要停止定时器,并且复原按钮初始状态
        // 定义剩下的秒数

        var btn = document.querySelector("button")
        var num = 5
        btn.addEventListener("click", function () {
            this.disabled = true
            this.innerHTML = "再过" + num + "秒重新发送短信"
            var timer = setInterval(function () {
                num--
                btn.innerHTML = "再过" + num + "秒重新发送短信"
                if (num == 0) {
                    clearInterval(timer)
                    btn.disabled = false
                    btn.innerHTML = "发送"
                    num = 5;
                }
            }, 1000)
        })

    </script>
</body>

</html>

四、不同的存储方式 

        1、会话存储:sessionStorage

               存储的有效期至当前浏览器会话结束,关闭浏览器标签页或窗口后数据会被清除。

                且存储的值必须为字符串型,如果值为对象可以使用JSON转换。

sessionStorage.setItem('name',val)存储

sessionStorage.getItem('name')

获取

sessionStorage.removeItem('name')

删除

sessionStorage.clear()

清空
        set.onclick = function () {
            console.log(ipt.value);
            var obj = {
                name: "aa",
                age: 18, tel: 13344445555
            }
            if (ipt.value) {
                // JSON.stringify()  对象转字符串
                sessionStorage.setItem("uname", JSON.stringify(obj))
                sessionStorage.setItem("name", ipt.value)
            }
        }

        get.onclick = function () {
            console.log("aa");
            console.log(sessionStorage.getItem("uname"));
                // JSON.parse()    字符串转对象
            console.log(JSON.parse(sessionStorage.getItem("uname")));
        }

2、本地存储:localStorage

        数据在本地存储,不会随着浏览器关闭而消失,除非用户主动删除数据,或者通过脚本删除。

localStorage.setItem('name',val)

存储

localStorage.getItem('name')

获取

localStorage.removeItem('name')

删除

localStorage.clear()

清除
        set.addEventListener("click", function () {
            if (ipt.value) {
                localStorage.setItem("uname", ipt.value)
            }
        })
        get.addEventListener("click", function () {
            console.log(localStorage.getItem("uname"));
        })
        remove.addEventListener("click", function () {
            localStorage.removeItem("uname")
        })
        del.addEventListener("click", function () {
            localStorage.clear()
        })

记录用户名案例

<!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>Document</title>
</head>

<body>
    <input type="text" id="username"> 
    <input type="checkbox" name="" id="remember"> 记住用户名
    <script>
        // 1.页面加载 判断是否有值
        // 2.点击多选框  存储和移除值
        var ipt = document.querySelector("#username")
        var rem = document.querySelector("#remember")
        console.log(1);
        if (localStorage.getItem("uname")) {
            ipt.value = localStorage.getItem("uname")
            rem.checked = true
        }

        rem.onclick = function () {
            console.log(this.checked);
            if (this.checked) {
                if (ipt.value) {
                    localStorage.setItem("uname", ipt.value)
                }
            } else {
                localStorage.removeItem("uname")
            }
        }

    </script>
</body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值