JS基础知识day9

定时器  

        语法 : setInterval(fn , time)

        变量存储的是一个数字(页面当中的第几个定时器)

        定时器是异步的

        清除定时器  clearInterval(第几个定时器)

        存储定时器的变量必须在点击事件外面声明 -> 也就是说他必须是一个全局变量

        定时器:重复的闹钟

        延时器:一次性的闹钟

 延时器  可以当做定时器来使用   写递归

        不做区分(编号,清除)

        bug  定时器叠加

           解决:

               1 每次点击的时候,先清除,再启动定时器 --- 保证只有一个定时器

               2 点完之后禁用,一段时间之后(事情完成以后)解除禁用   --- 验证码60s倒计时

        setTimeout(fn , time)

        变量存储的是第几个闹钟(不分定时器和延时器)

        setTimeout 也是异步  

        clearInterval 可以清除定时器,也可以清除延时器

        clearTimeout  可以清除延时器,也可以清除定时器

JS 单线程的语言

          代码正常从上往下执行

         但是有一些特殊的功能:异步

          图片的请求,数据的请求 --- 需要服务器响应(需要时间的)

          定时器和延时器以及点击事件  -- 不是立即执行的(需要时间,或者需要用户)

异步:

          在点击事件里面,绑定是同步的,事件处理函数是异步的

          在定时器里面,要做的事情是异步的

js的所有代码都在主线程上执行

          同步先执行

          异步存放在任务队列中(任务队列不能执行任务,而是任务到时间了之后去主线程上执行)


JS的三大组成部分

ECMAScript  /  BOM  /  DOM

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

        DOM:document object model  文档对象模型

DOM会有延迟

            页面在获取焦点的时候,会优先使用现有的资源

            而失去焦点的页面的资源会延后---不等于不处理

BOM:浏览器对象模型

          每个浏览器窗口都是一个window对象

        var window = new Window()   在每一次打开一个页面的时候默认就创建了一个window对象

        每一个页面不共享window

        每次创建的全局变量和函数都是属于window对象的属性和方法

BOM常见属性

          navigator

              userAgent 会详细的显示浏览器的版本信息

          location 地址栏

              href  整个网址

              host  域名+端口号

              hostname  域名

              port  端口号

              protocal  协议 (http / https)

              search 问号后面的一串   表单提交的数据

              hash   井号后面的一串  锚点

              assign()  跳转至新的页面

              replace()  替换当前页面  --- 不会被历史记录

              reload()  刷新页面

          history  历史记录

              length 在同一个窗口打开过几个页面

              forward()  前进

              back()  后退

              go(1 / -1) 可进可退

          document  文档    DOM实际上是BOM的一部分

console.log(navigator);

        console.log(navigator.userAgent);


        function sheBei() {  
            if(navigator.userAgent.includes('iPhone')) {
                // console.log('使用的是苹果手机');
                // 处理对应的兼容问题
                document.body.background = 'black' ;
                return 
            }
            if(navigator.userAgent.includes('Android')) {
                // console.log('使用的是安卓手机');
                
                return 
            }
            if(navigator.userAgent.includes('win64')) {
                // console.log('使用的是window系统的电脑');
               
            }

        }




        console.log(location);


        setTimeout(function () {  
            //获取或者设置新的地址
            location.href = 'http://www.baidu.com'
            location.search = '?username=yy&password=123'
            //设置新的地址
            location.assign('http://www.baidu.com')


            //替换新的地址  --- 替换了所有的历史记录
            location.replace('http://www.baidu.com')

        },3000)


        location.reload()


        console.log(window);

BOM方法

//  open()  打开新的浏览器窗口    网页重定向(默认被拦截)
        //  close() 关闭本窗口


        setTimeout(function () {  
            // 打开一个新的窗口 --- 网页重定向(默认被拦截)
            // open('http://www.baidu.com')
            close()
        },3000)

BOM事件

        load事件:等待页面资源加载完毕之后执行

        scroll 页面滚动时触发这个事件   --- 高频率触发的事件

        resize 窗口大小大声改变时触发此事件 --- 高频率触发的事件

onscroll / onresize 是高频率触发事件

函数的防抖和节流

             干啥的?  解决高频率触发事件


 

        函数防抖(debounce):触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。 --- 每次点击,就重做

        函数节流(throttle):高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。 --- 点击一次,就把事情干完,没干完之前点击没用

       

             点了一次之后,一段时间不能再点,事情干完之后可以再点   函数节流

             点了以后立即清除定时器   函数防抖

// 函数防抖举例:
        var t ;
        window.onscroll = function () { 
            clearTimeout(t) ;
            t = setTimeout(function () {  
                console.log(888);
            },300)
        }
// 函数节流距举例
// var oBtn = document.getElementById('btn') ;
        // oBtn.onclick = function () {  
        //     oBtn.disabled = true ;
        //     var count = 6 ;
        //     oBtn.innerHTML = count + 's之后可以再次点击'
        //     var t = setInterval(function () {  
        //         count-- ;
        //         oBtn.innerHTML = count + 's之后可以再次点击'
        //         if(count <= 0) {
        //             clearTimeout(t) ;
        //             oBtn.disabled = false ;
        //             oBtn.innerHTML = '获取验证码'
        //         }
        //     },1000)
        // }


var oBtn = document.getElementById('btn') ;
        var flag = true ;   // 判断可不可以点击
        oBtn.onclick = function () {  
            if(flag) {
                flag = false ;
                var count = 6 ;
                oBtn.innerHTML = count + 's之后可以再次点击'
                var t = setInterval(function () {  
                    count-- ;
                    oBtn.innerHTML = count + 's之后可以再次点击'
                    if(count <= 0) {
                        clearTimeout(t) ;
                        flag = true
                        oBtn.innerHTML = '获取验证码'
                    }
                },1000)
            }
        }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值