JavaScript学习笔记15

  • 目录

    JS执行机制

    location对象

    URL:统一资源定位符,

    五秒之后自动跳转页面案例

    获取URL参数案例

    location对象的方法

    location.assign()

    location.replace()

    location.reload()

    userAgent

    history对象

    PC端特效

    元素偏移量offset系列

    element.offsetParent 

    element.offsetTop 

    element.offsetLeft

    element.offsetWidth

    element.offsetHeight

    offset与style的区别

    获取鼠标在盒子内的坐标案例


  • JS执行机制

    • 先执行执行栈里面的同步任务

    • 异步任务放入任务队列中。

    • 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取异步任务结束等待状态,进入执行栈,开始执行。

    • 事件循环:主线程不断地获得任务、执行任务、再获取任务

    • 异步进程处理

    • location对象

      • window对象下的location对象,获取或者设置窗体的url,因为这个属性返回的是一个对象

      • URL:统一资源定位符,

        • 是互联网上的标准资源地址,互联网上的每个文件,都有唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

      • 获取或者设置整个URLlocation.href

      • 返回主机(域名):location.host

      • 返回端口号location.port

      • 返回参数location.search

      • 返回片段(#后面内容,常见于链接锚点):location.hash

    • 五秒之后自动跳转页面案例

      • 利用定时器

      • 时间到了,就添加使用location.href

      • 案例

        <!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>Document</title>
        
        </head>
        
        <body>
            <button>点击</button>
            <div></div>
            <script>
                var btn = document.querySelector('button');
                var div = document.querySelector('div');
                btn.addEventListener('click', function () {
                    // console.log(location.href);
                    location.href = 'http://www.itcast.cn';
                })
                var timer = 5;
                setInterval(function () {
                    if (timer == 0) {
                        location.href = 'http://www.itcast.cn';
                    }
                    div.innerHTML = '您将在' + timer + '之后跳转到首页';
                    timer--;
                }, 1000);
            </script>
        
        </body>
        
        </html>

      • 结果

         

    • 获取URL参数案例

      • 1第一个登陆页面,里面有提交表单,action提价到index.html页面

      • 2.第二个页面可以使用第一个页面的参数location.search参数

      • 在第二个页面中,需要把?username = red里面的参数red单独提取出来

      • 第一步去掉?利用substr截取字符串,语法substr('起始位置',截取几个字符)

      • 第二步,利用=号分隔键和值split(‘=’)

      • 案例

        • index.html

          <!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>Document</title>
          
          </head>
          
          <body>
              <div></div>
              <script>
                  console.log(location.search);//得到?uname=red
                  //1.先去掉问号 substr('起始位置',截取几个字符)
                  var params = location.search.substr(1,);
                  console.log(params);
                  //2.利用=号将字符串分隔为数组,split('=')分隔
                  var arr = params.split('=');
                  console.log(arr);//得到数组['uname' , 'red']
                  var div = document.querySelector('div');
                  //3.把分隔出来的数据写入div中
                  div.innerHTML = arr[1] + '欢迎您';//得到red
          
              </script>
          
          </body>
          
          </html>
        • <!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>Document</title>
          
          </head>
          
          <body>
              <!-- 提交给index.html页面 -->
              <form action="index.html">
                  用户名:<input type="text" name="uname">
                  <input type="submit" value="登录">
              </form>
          
          </body>
          
          </html>

      • 结果

        • 跳转之前的结果

      •  跳转之后的结果

         

    • location对象的方法

      • location.assign()

        • 跟href一样,可以跳转页面

      • location.replace()

        • 替换当前页面,因为不记录历史,所以不能后退

      • location.reload()

        • 重新加载页面,相当于刷新按钮

        • 参数如果为true强制刷新

        • 案例

          <!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>Document</title>
          
          </head>
          
          <body>
              <button>点击</button>
              <script>
                  var btn = document.querySelector('button');
                  btn.addEventListener('click', function () {
                      //location.assign('http://www.itcast.cn');//assign记录浏览历史可以实现后退功能
                      location.replace('http://www.itcase.cn');//replace不记录浏览历史,所以不能后退
                      location.reload();//相当于刷新按钮
                  })
              </script>
          
          </body>
          
          </html>

      • 包含有关浏览器信息

      • userAgent

        • 返回客户机发送服务器的user-agent头部的值

      • 下面代码可以判断用户那个终端夜绵绵打开页面,实现跳转

    • history对象

      • back()可以后退功能

      • forward()前进功能

      • go(参数) 前进后退功能,参数如果是1前进一个页面,-1 是后退一个页面

  • PC端特效

    • 元素偏移量offset系列

      • 动态获取元素的位置、大小等

      • 获取元素自身的大小

      • 获取元素距离带有定位父元素的位置

      • 注意:返回的数值不带单位

      • element.offsetParent 

        • 返回作为该元素带有定位的父级元素,如果没有父级元素就返回body

      • element.offsetTop 

        • 返回元素相对带有定位元素上方偏移

      • element.offsetLeft

        • 返回元素相对带有定位元素左方偏移

      • element.offsetWidth

        • 返回自身包括padding、边框、内容区的宽度,返回数值不带单位

      • element.offsetHeight

        • 返回自身包括padding、边框、内容区的宽度,返回数值不带单位

      • 案例

        <!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>Document</title>
            <style>
                * {
                    margin: 0;
                    padding: 0;
                }
        
                .father {
                    /* 如果想要得到子盒子到父亲的距离,必须要给父亲添加定位 */
                    position: relative;
                    width: 200px;
                    height: 200px;
                    background-color: aquamarine;
                    margin: 150px;
                }
        
                .son {
                    width: 100px;
                    height: 100px;
                    background-color: antiquewhite;
                    margin-left: 45px;
                }
        
                .w {
                    width: 200px;
                    height: 200px;
                    background-color: skyblue;
                    margin: 0 auto 200px;
                    padding: 10px;
                    border: 15px solid red;
                }
            </style>
        
        </head>
        
        <body>
            <div class="father">
                <div class="son"></div>
            </div>
            <div class="w"></div>
            <script>
                var father = document.querySelector('.father');
                var son = document.querySelector('.son');
                //1可以得到元素的偏移 返回的不带单位
                console.log(father.offsetTop);
                console.log(father.offsetLeft);
                //他以带单位的父盒子为准 ,如果复合子没有定位,则以body为准
                console.log(son.offsetLeft);
                //2可以得到元素大小宽度和高度  包含padding+border+width
                var w = document.querySelector('.w');
                console.log(w.offsetWidth);
                console.log(w.offsetHeight);
                //3.返回带有定位的父亲 否则返回的是body
                console.log(son.offsetParent);
                console.log(son.parentNode);//parentNode返回父亲 是最近一级的父亲 不管有没有定位
            </script>
        
        </body>
        
        </html>

      • 结果

         

    • offset与style的区别

      • 获取元素大小使用offset

      • 改变元素值,则需要用style

      • 案例

        <!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>Document</title>
            <style>
                .box {
                    width: 200px;
                    height: 200px;
                    background-color: #ccc;
                }
            </style>
        
        </head>
        
        <body>
            <div class="box" style="width:200px;"></div>
            <script>
                var box = document.querySelector('.box');
                console.log(box.offsetWidth);//offset行内样式表和内嵌样式表的值都可以得到
                console.log(box.style.width);//style只能获取行内样式表的值
                //box.offsetWidth = '300px';//此代码无效 不能改变
                box.style.width = '300px';//代码有效 width改变为300px
            </script>
        
        </body>
        
        </html>

      • 结果

         

    • 获取鼠标在盒子内的坐标案例

      • 利用e.pagex,e.pagey获得鼠标在页面的坐标

      • 得到盒子在页面中的坐标box.offsetLeft、box.offsetTop

      • 用鼠标距离页面的坐标减去盒子在页面的距离就可以得到

      • 想要一定鼠标就获得最新的坐标,使用mousemove

      • 案例

        <!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>Document</title>
            <style>
                .box {
                    width: 200px;
                    height: 200px;
                    background-color: antiquewhite;
                    margin: 200px;
                }
            </style>
        
        
        </head>
        
        <body>
            <div class="box"></div>
            <script>
                var box = document.querySelector('.box');
                box.addEventListener('mousemove', function (e) {
                    /* console.log(e.pageX);
                    console.log(e.pageY);
                    console.log(box.offsetLeft); */
                    var x = e.pageX - this.offsetLeft;
                    var y = e.pageY - this.offsetTop;
                    this.innerHTML = 'x坐标是' + x + 'y坐标是' + y;
                })
            </script>
        
        </body>
        
        </html>

      • 结果

      • JavaScript基础语法-dom-bom-js-es6新语法-jQuery-数据可视化echarts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值