Web APIs(一)

95 阅读4分钟

Web APIs

一、web API 基本认知

1.作用和分类

①作用:使用JS去操作html和浏览器

②分类:DOM(文档对象模型)、BOM(浏览器对象模型)

2.什么是DOM:用来呈现以及与任意HTML或XML文档交互的API,dom是浏览器提供的一套专门用来 操作网页内容的功能,且可作为开发网页内容特效和实现用户交互 3.DOM树

①将html文档以树状结构直观的表现出来

②描述网页内容关系的名词

③作用:文档树直观的体现了标签和标签之间的关系

4.DOM对象

(1)DOM对象:浏览器根据html标签生成的对象

①所有标签的属性都可以在这个对象上面找到

②修改这个对象的属性会自动映射到标签身上

(2)把网页内容当做对象来处理(核心思想)

(3)document 对象

①是dom提供的一个对象

②它提供的属性和方法是用来访问和操作网页内容的

③网页所有内容都在document里面

二、获取DOM对象

1.目标:能查找/获取DOM对象

2.根据CSS选择器来获取DOM元素

(1)语法

document.querySelector('选择器')

//包含一个或多个有效的css选择器 字符串

//返回值:css选择器匹配的第一个元素,一个HTMLElement对象

let inputDom = document.querySelector("input"); // 找不到元素 输出 null

      console.dir(inputDom);

(2)选择器匹配多个元素

document.querySelector('ul li')

// 空格 间隔

// 返回值 css选择器匹配的NodeList 对象集合

(3)获取dom小结

①想要获取页面的标签 可以通过 document.querySelector(选择器)

②querySelector 只能够获取第一个满足条件的标签

③如果选择器找不到元素 querySelector只会返回null

④如果我们想要输出和打印 dom 元素:不要再使用 console.log,改为 使用 console.dir

3.其他获取DOM元素方法

//根据id获取一个元素
document.getElementById('nav')

//根据 标签获取一类元素 获取页面 所有 div
document.getElementsByTagName('div')

//根据类名获取元素 获取页面 所有类名 w
document.getElementsByClassName('w')

  <body>
    <div id="nav">id选择器</div>
    <p>这个是p标签</p>
    <div class="container">也是div container</div>
    <script>
      // 根据id来获取  一个dom
      // let nav = document.getElementById("nav");
      // console.log(nav)

      // 根据 标签名称 来获取dom元素   一组dom元素
      // let ps=document.getElementsByTagName("p");
      // console.log(ps);

      // 根据 类名来获取元素 一组元素
      // let divs = document.getElementsByClassName("container");
      // console.log(divs);
      //

      // 常用和方便
      // 获取一个
      // document.querySelector("#nav")
      // document.querySelector("p")
      // document.querySelector(".container")

      // 获取一组
      // document.querySelectorAll
    </script>
  </body>

三、设置/修改DOM元素属性

1.目标:能够修改元素的文本更换内容

2.修改标签元素内容的方式:

①document.write() 方法

//永远都是追加的操作,只能在位置</body><script>
      document.write("hello world");
      document.write("<h3>hello world</h3>");
    </script>

②对象.innerText 属性

//innerText 将文本内容添加  更新到任意标签位置
let info =document.getElementById('info')

//intro.innerText='HI,我叫李雷' // 文本中包含的标签不会被解析
info.innerText = '<h4>HI,我叫李雷</h4>'

③对象.innerHTML 属性

// 将文本内容添加/更新到任意标签位置
//文本中包含的标签会被解析

box.innerHTML ='<h4>HI,我叫李雷</h4>'

3.案例

(1)案例---将输入的信息修改进标签内

    <script>
      /* 需求
        1.获取输入的文字
        2.填入标签中 */
      let username = prompt("请输入名字");
      let h2Dom = document.querySelector("h2");
      //   h2内文字 等于 username
      //   innerText 填写补充 标签内的内容
      h2Dom.innerText = username;
    </script>

(2)案例---随机选择并将选择结果修改至td标签内

   <table border="1">
      <tr>
        <th>今天吃什么呢?</th>
      </tr>
      <tr>
        <td></td>
      </tr>
    </table>
    <script>
      let food = ["喝粥", "煲仔饭", "叉烧饭", "烧鸭饭"];
      function getNum(max, min) {
        return Math.round(Math.random() * (max - min) + min);
      }
      let num = getNum(food.length - 1, 0);
      tdDom = document.querySelector("td");
      tdDom.innerText = food[num];
    </script>

(3)案例-综合

  <body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
    </ul>

    <script>
      //  以后就很少用了 document.write 功能弱 只能把标签写在  /body  标签上面
      // document.write
      document.querySelector("li:nth-child(2)").innerText =
        "<button>随便修改</button> ";

      document.querySelector("li:nth-child(3)").innerHTML =
        "<button>随便修改</button> ";

      /* 
      3 种实现在标签中写 动态设置文本

      1  document.write 只能在body标签的中写 以后 很使用它
      2  innerText 只能设置文本,不能解析 html字符串
      3  innerHTML 可以设置文本 也可以解析html字符串 
      
       */
    </script>
  </body>

4.设置/修改元素常用属性

(1)通过 JS 设置/修改标签元素属性,比如通过 src更换 图片,最常见的属性比如: href、title、src 等

(2)语法: 对象.属性 =属性值 对象.style.属性= 属性值

// 1.获取元素
let pic =document.querySelectpr('img')
// 2.操作元素
pic.title='这是一个图片';
pic.src='./images/1.jpg';

//元素样式修改
标签.style.color = '值'
标签.style.backgroundColor = '值'  小驼峰写法

(3)案例

//  属性修改
<body>
    <img src="./images/1.png" alt="" />
    <script>
      let pic = ["1.png", "2.png", "3.png", "4.png", "5.png"];
      let index = Math.round(Math.random() * 5);
      let imgDom = document.querySelector("img");
      imgDom.src = `./images/${pic[index]}`;
    </script>
  </body>


//  样式修改
    <script>
      p.style.fontSize = "26px";
      p.style.color = "red";
      p.style.backgrounColor = "skyblue";

      /* 小结
      1  标签.style.样式 
      2  js中不能写- 否则会判定为 减号 用小驼峰表示*/
    </script>

(4)案例---背景色随机

知识点:颜色rgb(a,b,c)、函数、Math数学运算

  <body>
    <script>
      function getBGColor(max, min) {
        return Math.round(Math.random() * (max - min) + min);
      }
      let color1 = getBGColor(255, 0);
      let color2 = getBGColor(255, 0);
      let color3 = getBGColor(255, 0);
      document.body.style.backgroundColor = `rgb(${color1},${color2},${color3})`;
    </script>
  </body>

5.操作类名className

①由于class是关键字, 所以使用className去代替

②className是使用新值换旧值, 如果需要添加一个类,需要保留之前的类名

③直接使用 className 赋值会覆盖以前的类名

  <body>
    <div></div>
    <script>
      /* 
    className 
    会先清空这个dom的元素 旧的所有的类 然后再单独添加上 新的类 

    如果想要同时设置多个 class  以空格做分割即可 
    
     */

      // js的方式来动态添加上这个class
      let div = document.querySelector("div");
      // 通过 className 来设置类名即可

      // 同时设置两个类上去
      div.className = "box redCls";
    </script>
  </body>

6.操作类名classList

①标签.classList.add(‘类名’) 追加一个类名

②标签.classList.remove(‘类名’) 删除一个类名

③标签.classList.toggle(‘类名’) 切换一个类名

<!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: 100px;
        height: 100px;
        border: 1px solid #000;
        text-align: center;
        line-height: 100px;
      }
      .box2 {
        background-color: red;
      }
      .box3 {
        color: skyblue;
      }
    </style>
  </head>
  <body>
    <div>123</div>
    <script>
      let div = document.querySelector("div");

      // 添加一个类 add  添加多个 ''括起来,用 逗号 隔开
      div.classList.add("box", "box2");

      // 单独移除一个类remove
      div.classList.remove("box");

      // 切换类  如有 就算作移除 若 无  则 添加
      div.classList.toggle("box3");
    </script>
  </body>
</html>

案例----背景转换(设置样式表---通过函数及Math运算,达成需求)

<!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>
      .box1 {
        background-image: url(./images/1.png);
      }
      .box2 {
        background-image: url(./images/2.png);
      }
      .box3 {
        background-image: url(./images/3.png);
      }
      .box4 {
        background-image: url(./images/4.png);
      }
      .box5 {
        background-image: url(./images/5.png);
      }
    </style>
  </head>
  <body>
    <script>
      let bgImages = ["box1", "box2", "box3", "box4", "box5"];
      function getBox(max, min) {
        return Math.round(Math.random() * (max - min) + min);
      }
      let Box = getBox(bgImages.length - 1, 0);
      let body = document.querySelector("body");
      body.classList.add(`${bgImages[Box]}`);
    </script>
  </body>
</html>

四、定时器---间歇函数

1.目标:能够说出定时器函数在开发中的使用场景,能够使用定时器函数重复执行代码

2.开启定时器

①作用:每隔一段时间调用这个函数

②间隔时间单位是毫秒

// setInterval(函数,间隔时间)

    <script>
      // 函数 复杂 定时执行的业务
      // function repeat() {
      // console.log('大数据库的骄傲');
      // }
      //

      // 每间隔一秒执行一次函数
      // 时间单位 毫秒 1000毫秒 = 1秒
      // setInterval(repeat,1000);

      // 其他模样的写法
      // setInterval(匿名函数,1000);
      setInterval(function () {
        console.log("大数据库的骄傲");
      }, 1000);
    </script>

3.关闭计时器

// let 变量名= setInterval(函数,间隔时间);
// clearInterval(变量名)

    <script>
      // 开启了一个定时器 会返回 定时器id
      // 不需要关心 这个定时器的id 等于多少, 有id
      // let timeId = setInterval(function () {
      //   console.log('准备吃晚饭');
      // }, 1000);

      // // console.log(timeId);

      // // 清除定时器 一般都是要根据某个条件来清除
      // clearInterval(timeId);

      // 追女孩子  追30次 不行 我就撤退!!

      let index = 0;

      // 创建定时器的同时 返回了定时器id
      let timeId = setInterval(function () {
        index++;
        console.log("开始追了", index);
        // 判断是否满足条件了
        if (index === 30) {
          // 放弃 没有缘分
          clearInterval(timeId);
        }
      }, 100);
    </script>