JavaScript之BOM

153 阅读1分钟

介绍

BOM 即 browser object model 浏览器对象模型

BOM的范围大于DOM ,关键字用window(浏览器顶级对象)

window下的特殊属性 name ,打印显示空

常用api

setTimeout( 回调函数 , 毫秒数(不写默认为0) ) 设置定时器但是时间到了只执行一次 setTimeout( function(){xxx},0)

clearTimeout( 定时器标识符 )
停止某个定时器继续倒计时 clearTimeout(timer)

setInterval( 回调函数 , 毫秒数(不写默认为0) ) 设置定时器但是可以无限调用(时间到了重新倒计时) setInterval( function(){xxx},0)

clearInterval( 定时器标识符 ) clearInterval(timer)

倒计时案例

当前时间:
<div class="nowtime"></div>
距离国庆节:
<div class="timer"></div>

<script>
    var timer = document.querySelector('.timer')
    var nowtime = document.querySelector('.nowtime')

    function getTime() {     // 获取当前年月日时分秒
        var date = new Date()
        var year = date.getFullYear();
        var month = date.getMonth() + 1;    //date.getMonth()获取的是0-11 0代表一月
        var day = date.getDate();
        var hours = date.getHours();
        var minutes = date.getMinutes()
        var seconds = date.getSeconds()
        month = month < 10 ? "0" + month : month
        day = day < 10 ? "0" + day : day
        hours = hours < 10 ? "0" + hours : hours
        minutes = minutes < 10 ? "0" + minutes : minutes
        seconds = seconds < 10 ? "0" + seconds : seconds
        let time = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
        return time;
    }
    function countDown(time) {
        var nowTime = +new Date();// 返回的是当前时间总的毫秒数
        var inputTime = +new Date(time);// 返回的是用户输入时间总的毫秒数
        var times = (inputTime - nowTime) / 1000;// times是剩余时间总的秒数 
        var d = parseInt(times / 60 / 60 / 24);// 天 (除60得分 除60得时  除24得天数)
        d = d <10 ? '0' + d : d;    
        var h = parseInt(times / 60 / 60 % 24);//时 (除60得分 除60得时  除24取余得不满一天剩下的小时数)
        h = h < 10 ? '0' + h : h;
        var m = parseInt(times / 60 % 60);// 分 (除60得分 除60取余得不满一小时剩下的分钟数)
        m = m < 10 ? '0' + m : m;
        var s = parseInt(times % 60); // 当前的秒 (除60取余得不满一分钟剩下的秒数)
        s = s < 10 ? '0' + s : s;
        countdown =   d + '天 ' + h + '时 ' + m + '分 ' + s + '秒'
        timer.innerHTML = countdown
    }
    nowtime.innerHTML = getTime();
    setInterval(function () {
        nowtime.innerHTML = getTime();
    },1000)

    var ttt = '2022-10-1 00:00:00'
    countDown(ttt)
    setInterval('countDown(ttt)',1000)
    </script>

效果:

在这里插入图片描述

this指向问题

  • 全局作用域或普通函数中this指向全局对象window (如 定时器中、函数中、全局中的log里this均是指向window)

  • 对象中的方法中的this指向的是对象

  • 按钮元素的点击事件的this指向的是按钮元素 (如 按钮元素.onclick = 函数 中 和 addEventListener('click',函数)中的this都是这项按钮元素)

  • 实例化的构造函数 中的this指向实例对象 (如 function Fun(){} ; var fun = new Fun(); 中Fun中的this指向fun)