Web Apls第七天

192 阅读3分钟

Web Apls第七天

1.Window对象

1.BOM

1.BOM介绍

①指的是浏览器对象模型

②window 是浏览器内置中的全局对象,我们所学习的所有 Web APIs 的知识内容都是基于 window 对象实现的

③包含了 navigator、location、document、history、screen 5个属性

④document 是实现 DOM 的基础,它其实是依附于 window 的属性。

2. 定时器-延时函数

1.JavaScript 内置的一个用来让代码延迟执行的函数,叫 setTimeout

2.语法:

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

3.清除延时函数

let timer = setTimeout(回调函数, 等待的毫秒数)
clearTimeout(timer)

4.案例:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>13-定时器-延时器.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <script>
      // 延时器 - 只会执行一次而已
      let timeid = setTimeout(function () {
        console.log('猜猜我是谁');
      }, 5000);
      // 取消延时器
      clearTimeout(timeid);

    </script>
  </body>
</html>

3.两种定时器对比

①setInterval 的特征是重复执行,首次执行会延时

②setTimeout 的特征是延时执行,只执行 1 次

③setTimeout 结合递归函数,能模拟 setInterval 重复执行

④clearTimeout 清除由 setTimeout 创建的定时任务

4.location

1.作用

①location 的数据类型是对象,它拆分并保存了 URL 地址的各个组成部分

2.常用属性和方法

① href 属性获取完整的 URL 地址,对其赋值时用于地址的跳转

//可以得到当前文件UPL地址
console.log(location.href)
//可以通过js方式跳转到目标地址
location.href = 'http://www.itcast.cn'

②search 属性获取地址中携带的参数,符号 ?后面部分

console.log(location.search)

③hash 属性获取地址中的啥希值,符号 # 后面部分

console.log(location.hash)

④reload 方法用来刷新当前页面,传入参数 true 时表示强制刷新

<button>点击刷新</button>
<script>
    let btn = document.querySelector('button')
    btn.addEventListener('click', function (){
        location.reload(true)
        //强制刷新 类似 ctrl + f5
    } )                    
</script>

3.案例:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>17-location.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <button>跳转到百度</button>
    <script>
      // 1 使用a标签 href 属性 可以实现页面跳转
      // 2 在js中,也可以直接跳转  location.href 来跳转
      // 3 location.href 也可以实现刷新 location.href = location.href;

      const button = document.querySelector('button');
      button.addEventListener('click', function () {
        // location.href="http://www.baidu.com";

        // console.log(location.href);// http://127.0.0.1:5500/17-location.html

        // 刷新功能
        location.href = location.href; // 刷新功能
      });

      setTimeout(function () {
        // location.href="http://www.baidu.com";
      }, 5000);
    </script>
  </body>
</html>

5.navigator

1.作用

① navigator的数据类型是对象,该对象下记录了浏览器自身的相关信息

2.常用属性和方法

//1. 检测 userAgent(浏览器信息)
!(function () {
const userAgent = navigator.userAgent
//2. 验证是否为Android或iPhone
const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
//3. 如果是Android或iPhone,则跳转至移动站点
if (android || iphone) {
location.href = 'http://m.itcast.cn'
}
})()

3.案例:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>18-navigator-useragent.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>

    <a href="#">下载软件</a>
    
    <script>
      // 作用 检测当前浏览器的版本和型号
      //  手机端来说,  安卓手机 可以直接下载apk 手机软件的 
      //               ios 手机来说 不可以直接下载手机软件 必须要回到苹果的应用商店中来下载
      // 安卓手机来说 点击 下载软件 给它下载apk
      // iphone手机来说 点击 下载软件 可能只需给苹果手机一个提示 


      // 可以识别出 当前的访问设备是 pc端还是移动端
      // 后台根据 当前用户的设备类型 来返回 对应的平台的页面
      // pc端来访问我的页面 我给你显示pc端的页面
      // 移动端来访问我的页面 我给你显示移动端的页面 
      // b站就是 


      // console.log(window.navigator.userAgent); 

      // 也是直接找别人写好的代码 检测即可 
      // 我也想自己去检测 花时间去截取和处理字符串  字符串方法 和 正则 

      // !(function () {
      //   const userAgent = navigator.userAgent;
      //   // 验证是否为Android或iPhone
      //   const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/);
      //   const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/);
      //   // 如果是Android或iPhone,则跳转至移动站点
      //   // if (android || iphone) {
      //   //   location.href = 'http://m.itcast.cn';
      //   // }
      //   console.log(android);
      //   console.log(iphone);
      // })();
      validBrowser()
      function validBrowser() {
        var u_agent = navigator.userAgent;
        var browser_name = 'Failed to identify the browser';
        if (u_agent.indexOf('Firefox') > -1) {
          browser_name = 'Firefox';
        } else if (u_agent.indexOf('Chrome') > -1) {
          browser_name = 'Chrome';
        } else if (
          u_agent.indexOf('Trident') > -1 &&
          u_agent.indexOf('rv:11') > -1
        ) {
          browser_name = 'IE11';
        } else if (
          u_agent.indexOf('MSIE') > -1 &&
          u_agent.indexOf('Trident') > -1
        ) {
          browser_name = 'IE(8-10)';
        } else if (u_agent.indexOf('MSIE') > -1) {
          browser_name = 'IE(6-7)';
        } else if (u_agent.indexOf('Opera') > -1) {
          browser_name = 'Opera';
        } else {
          browser_name += ',info:' + u_agent;
        }
        document.write('browser_name:' + browser_name + '<br>');
        document.write('u_agent:' + u_agent + '<br>');
      }
    </script>
  </body>
</html>

6.histroy

1.作用

①history 的数据类型是对象,该对象与浏览器地址栏的操作相对应,如前进、后退、历史记录等

2.常用属性和方法

①back()-------->后退功能

②forwark()--------->前进功能

③go(参数)---------->前进后退功能(参数为1,则前进1个页面, -1,则后退一个页面)

3.案例:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>19.history.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <a href="http://www.baidu.com">百度</a>
    <button class="forward">前进</button>
    <button class="back">后退</button>
    <script>
      const forward = document.querySelector('.forward');
      forward.addEventListener('click', function () {
        // history.forward();
        history.go(1); // 前进一个记录
      });
      const back = document.querySelector('.back');
      back.addEventListener('click', function () {
        // history.back();
        history.go(-1); // 后退一个记录
      });
    </script>
  </body>
</html>

2.swiper插件

1.swiper插件流程

①下载swiper对应的文件 - css + js

② 分布引入他们

③ 拷贝别人的固定结构

④拷贝写好的swiper 初始化js代码

⑤注意: 多个swiper同时使用的时候, 类名需要注意区分

2.如图

1650110430361

3.用swiper插件实现轮播图案例

<!-- 
  1 下载swiper对应的文件 - css + js 
  2 分布引入他们
  3 拷贝别人的固定结构
  4 拷贝写好的swiper 初始化js代码
 -->

 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta
       name="viewport"
       content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
     />
     <title>11-使用swiper插件实现轮播图.html</title>
     <!-- 引入css -->
     <link rel="stylesheet" href="./swiper/swiper-bundle.min.css" />
     <style>
       img {
         width: 100%;
       }
     </style>
   </head>
   <body>
     <div class="swiper">
       <div class="swiper-wrapper">
         <div class="swiper-slide"><img src="./assets/b_01.jpg" alt="" /></div>
         <div class="swiper-slide"><img src="./assets/b_02.jpg" alt="" /></div>
         <div class="swiper-slide"><img src="./assets/b_03.jpg" alt="" /></div>
       </div>
       <!-- 如果需要分页器 -->
       <div class="swiper-pagination"></div>
 
       <!-- 如果需要导航按钮 -->
       <div class="swiper-button-prev"></div>
       <div class="swiper-button-next"></div>
 
       <!-- 如果需要滚动条 -->
       <div class="swiper-scrollbar"></div>
     </div>
 
     <script src="./swiper/swiper-bundle.min.js"></script>
     <script>
       const mySwiper = new Swiper('.swiper', {
         // direction: 'vertical', // 垂直切换选项  水平滚动-默认就是水平滚动
         loop: true, // 循环模式选项
 
         // 如果需要分页器
         pagination: {
           el: '.swiper-pagination',
         },
 
         // 如果需要前进后退按钮
         navigation: {
           nextEl: '.swiper-button-next',
           prevEl: '.swiper-button-prev',
         },
 
         // 如果需要滚动条
         scrollbar: {
           el: '.swiper-scrollbar',
         },
       });
     </script>
   </body>
 </html>

3.本地存储

1.介绍

①数据存储在用户浏览器中

②设置、读取方便、甚至页面刷新不丢失数据

③容量较大,sessionStorage和localStorage约 5M 左右

2. localStorage

1.作用

①生命周期永久生效,除非手动删除 否则关闭页面也会存在

②可以多窗口(页面)共享(同一浏览器可以共享)

③以键值对的形式存储使用

2.存储数据

localStorage.setItem(key, value)

3.获取数据

localStorage.getItem(key)

4.删除数据

localStorage.removeItem(key)

5.清空数据

localStorage.clear()

6.案例:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>10-本地存储.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <script>
      /* 
      本地存储 四个api 
      1 存  localStorage.setItem(key,value)
      2 取  localStorage.getItem(key)
      3 删除一个 localStorage.removeItem(key)
      4 清空 localStorage.clear(); 
       */
       for (let index = 0; index <100; index++) {
         localStorage.setItem(`abc${index}`,index);
       }
      localStorage.clear(); 

    </script>
  </body>
</html>

3.存储类型

1.存储复杂数据类型存储

①本地只能存储字符串,无法存储复杂数据类型.需要将复杂数据类型转换成JSON字符串,在存储到本地

2.JSON.stringify(复杂数据类型)

①将复杂数据转换成JSON字符串 存储 本地存储中

3.JSON.parse(JSON字符串)

①将JSON字符串转换成对象 取出 时候使用

4.sessionStorage

1.作用

①生命周期为关闭浏览器窗口

②在同一个窗口(页面)下数据可以共享

③以键值对的形式存储使用

④用法跟localStorage 基本相同

2.案例:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>11-sessionStorage.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <script>
      /* 
      本地存储的技术 sessionStorage  会话(打开页面到关闭页面之间过程 一次会话  ajax node)存储
      登录的时候 
      它的用法和 localStorage 用法一样 
      区别只有一个 
      sessionStorage 关闭页面后 数据就丢失 
      localStorage 除非是用户主动删除 否则一直存在 直到天荒地老
       */

      //  存数据
      sessionStorage.setItem("ss",123);
      //  取数据
      console.log(sessionStorage.getItem("ss"));
      // 删除一个
      sessionStorage.removeItem("ss")
      // 清空
      sessionStorage.clear();
    </script>
  </body>
</html>

4.自定义属性(拓展)

1.固有属性

①标签天生自带的属性 比如class id title等, 可以直接使用点语法操作

2.自定义属性

①getAttribute('属性名') ------>自定义属性

②setAttribute('属性名', '属性值') -------> 设置自定义属性

③removeAttribute('属性名') --------> 删除自定义属性

3.data-自定义属性

1.意义

①传统的自定义属性没有专门的定义规则,开发者随意定值,不够规范,所以在html5中推出来了专门的data-自定义属性 在

标签上一律以(data-)开头 , 在DOM对象上一律以dataset对象方式获取

4.自定义属性案例演示

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>13-自定义属性使用演示.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <ul></ul>
    <script>
      // 根据数组 渲染出li标签 点击li标签的时候  根据它对应的颜色 设置到 我body标签背景中

      // 数组
      let arr = [
        { price: '100', title: '去旅游', color: 'yellow' },
        { price: '200', title: '去读书', color: 'red' },
        { price: '300', title: '去吃饭', color: 'blue' },
      ];

      const ul = document.querySelector('ul');
      let html = ``;
      for (let index = 0; index < arr.length; index++) {
        html += `<li data-price="${arr[index].price}" data-color="${arr[index].color}" >${arr[index].title}</li>`;
      }
      ul.innerHTML = html;

      // 事件委托
      ul.addEventListener('click', function (event) {
        // 当前点击的是li标签
        if (event.target.nodeName === 'LI') {
          // 设置body标签的背景颜色  等于什么  =  等于当前被点击的元素(li) 身上的自定义属性 data-color
          // document.body.style.backgroundColor = event.target.dataset.color;
          document.body.style.backgroundColor =
            event.target.getAttribute('data-color');
          // alert(
          //   // `你想要去做的事情,要花这么多钱哦 ${event.target.dataset.price}`
          // );
        }
      });
    </script>
  </body>
</html>