web API day1

108 阅读4分钟

web API基本认识

Web API基本认知

1.作用和分类

作用: 就是使用JS去操作html和浏览器。

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

DOM数

DOM树

  • 将HTML文档以树状结构直观的表现出来,我们称之为文档树或DOM树。
  • 描述网页内容关系的名词。
  • 作用:文档树直观的体现了标签与标签之间的关系

1648989240736

DOM对象(重要)

DOM对象 是浏览器根据html标签生成的 js 对象。

  • 所有的标签属性都可以在这个对象上面找到。
  • 修改这个对象的属性会自动映射到标签身上。

DOM的核心思想

  • DOM的核心思想 是 把网页内容当做对象来处理。

document对象

  • 是DOM里提供的一个对象。
  • 所以它提供的属性和方法都是用来访问和操作网页内容的。
  • 例:document.write() 。
  • 网页所有内容都在document里面 。

获取dom元素

根据css选择器来获取DOM对象。

  • querySelector :只能获取第一个符合要求的标签。能找到返回dom元素, dom对象。找不到对应的元素 返回null。(常用)

  • querySelectorAll:不管你的选择器对与否,返回值都是数组。(常用)

  • getElementById:根据id来获取 一个dom元素。

  • getElementsByTagName:根据标签名称来获取dom 元素 一组dom元素。

  • getElementsByClassName:根据类名获取元素 一组元素。

小结 1 . 想要获取页面的标签 可以通过 document.querySelector(选择器)。 2 . querySelector 只能够获取第一个满足条件的标签。 3 . 如果选择器找不到元素 querySelector 只会返回 null 。 4 . 如果我们想要输出和打印 dom元素。 不要再使用 console.log 改为 使用 console.dir

<body>
    <div>123</div>
    <div>456</div>
    <input type="text">
    <script>
        // dom对象 是浏览器自动帮我们创建好了
        // 1.div标签也会被 浏览器自动生成一个dom对象
        // 2.input标签也会被 浏览器自动生成一个dom对象

        //document.querySelector("css选择器")

        // 我们需要做的是 获取dom对象
        let divDom = document.querySelector("div")
        //只能获取满足条件的第一个元素

        //console.log(divDom)  //打印显示<div>123</div>,我们在输出打印 dom对象的时候 不再使用 console.log , console.dir()

        //console.dir(divDom) //打印显示div

        //我想要获取一下 input标签的 dom对象
      let inputDom = document.querySelector('div');// 找不到元素 输出 null 

      console.dir(inputDom);

    </script>
</body>

其他获取dom元素的方法(了解)
    <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('box')
        console.log(divs)


        // 常用和方便  获取一个
        document.querySelector

        // 获取一组
        document.querySelectorAll

    </script>

设置dom元素文本内容

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

​ 1. document.write 因为功能比较弱 只能把标签写在/body上面

​ 2. innerHTML 可以设备文本,也可以解析html字符串

3.  innerText  只能设置文本,不能解析html字符串。
**innerText **

示例

<body>
    <h1>哈哈哈哈哈哈</h1>
    <h2></h2>
    
    <script>
        /* 
        1 获取 输入框输入的内容
        2 把名字 显示到 h2标签中 
           1 先获取h2标签对应的dom元素
           2 使用代码修改文本内容 
         dom元素.innerText = "修改的内容 "
      */
     
        let userName = +prompt('请输入')

        let h2Dom = document.querySelector('h2')

        //设置h1标签中的文字 等于 username
        h2Dom.innerText = userName


    </script>
</body>
innerHTML
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <script>
        //innerHTML  可以设备文本,也可以解析html字符串
        document.querySelector('li:nth-child(2) ').innerHTML = '<button>变成按钮</button>' //可直接显示一个按钮
        
        document.querySelector('li:nth-child(3) ').innerText = '<button>变成按钮</button>'

        
    </script>

设置修改dom元素属性

可以通过js 修改其属性 1 . 获取标签对应的dom元素。 2 . dom对象.属性名=属性值。

示例:

<body>
    <!-- a 标签身上的  href  图片  src  alt  id  type  这些都是属性 -->
    <!-- 可以通过js 修改其属性 
        1. 获取标签对应的dom元素
        2.dom.属性名=属性值
    -->

    <a href="https://www.baidu.com/">跳转</a>

    <script>

        let adom = document.querySelector('a')
        //修改a标签属性href 给他换跳转的链接地址
        dom.href = 'https://gitee.com/ukSir/front-end-75-web-api'

    </script>
</body>

多张图片刷新随机显示一张 案例:


<body>

    <img src="" alt="">

    <script>
        //定义一个数组 把所有的图片装到一个数组里面 
        let arr = ['./xuan.jpg', './wen.jpg', './dog.jpg', './pic2.png',]
    
        //定义一个0~3 随机数
        let index = Math.round(Math.random() * 3);
    
    
        //获取dom元素
        let img = document.querySelector('img')
    
        //修改dom元素 img图片为数组[索引号随机数]   图片就随机变化了
        img.src = arr[index]
    </script>
</body>

设置元素样式

写法:

对象.style.样式属性 = 值

注意

  1. 修改样式通过style属性引出。

  2. 如果属性有-连接符,需要转换为小驼峰命名法。

  3. 赋值的时候,需要的时候不要忘记加css单位 。

示例:

<body>
    <div>普通的元素</div>

    <script>
        //获取dom元素
        let div = document.querySelector('div')

        //开始修改  
        div.style.fontSize="50px";
        div.style.color="pink";
        div.style.backgroundColor="skyblue";
        div.style.height="200px";
        div.style.width="400px"
        div.style.textAlign="center"
        div.style.lineHeight="200px"
    </script>
</body>

随机显示背景颜色案例

<body>
    <script>

        /*  定义个数组放颜色
            let color = ['pink','skyblue','red','yellow']
            定义一个来放索引号随机数
            let index = Math.round(Math.random ()* (color.length - 1));
            
            获取dom元素
            let body = document.querySelector('body');
            设置dom元素样式
            body.style.backgroundColor = color[index]; */



        //上面的方法 颜色有限
        //方法2 背景颜色 用rgb(0-255,0-255,0-255)随机的颜色可以有很多组合
        //定义个函数
        function getBackgroundColor(min, max) {
            return Math.round(Math.random() * (max - min) + min);

        }

        let color1 = getBackgroundColor(0, 255);
        let color2 = getBackgroundColor(0, 255);
        let color3 = getBackgroundColor(0, 255);

        document.body.style.backgroundColor = `rgb(${color1},${color2},${color3})`
    </script>
</body>

calssname

操作类名(className)

  • 操作CSS如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。
  • 直接给想要的元素加上这个类名,获取类选择器的css样式。
  • 由于class是关键字,所以使用className去代替。
  • className是使用新值换旧值,如果需要添加一个类,需要保留之前的类名
  • 可以同时给设置两个类名,以空格做分割即可;不过要注意样式重复的会层叠。

写法:

元素.className = '类名'

示例:

    <style>
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        .box{
            width: 500px;
            height: 500px;
            background-color: pink;
            padding: 100px;
            
        }

        .one{
            height: 100px;
            width: 500px;
            background-color: red;
            margin: 200px,auto;
        }
    </style>
</head>
<body>
    <div class>1</div>

    <script>
         /* 
        classname  会先清空这个dom元素 旧的所有类,然后再单独添加上 新的样式
        
        如果想要设置多个class 以空格做分割即可。
        如果两个类样式有重复,会层叠
        */

        //js的方式 来动态添加上样式
       let div = document.querySelector('div');

       //通过classname 来设置类名 可以同时设置两个类上去
       div.className = 'box '

    
    </script>

classList

  • 通过 classList 操作类控制CSS为了解决className容易覆盖以前的类名,我们可以通过classList方式追加和删除类 。

写法

追加一个类

元素.classlist.add('类名')

删除一个类

元素.classlist.remove('类名')

切换一个类(本来有的就移除,没有的就添加)

元素.classlist.toggle('类名')

示例:

<body>
    <div class="d1">111</div>
    <script>

        //添加一个class
        let div = document.querySelector('div');

        //classlist 添加类
        // div.classList.add("d2")
        div.classList.add("d2", "d3")

        // 单独来指定移除class
        div.classList.remove("d2")
        // div.classList.remove("d2","d3")

        // 切换(本来有的就移除,没有的就添加)
        div.classList.toggle("d4")
        // div.classList.toggle("d3")
    </script>
</body>

定时器-间歇函数

网页中经常会需要一种功能:每隔一段时间需要自动执行一段代码,不需要我们手动去触发 。

要实现这种需求,需要定时器函数 。

定时器函数有两种。

开启定时器

setInterval(函数,间隔时间) 开启定时器

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

  • 间隔时间单位是毫秒 ;1000毫秒 = 1秒。

示例:

    <script>
        // setInterval(函数,间隔时间)  开启定时器
        // 间隔时间单位是毫秒 1000毫秒=1秒

        //函数 负责 定时执行的业务
        function repeat(){
            document.write('hhhhhhhhh')
        }

        //每隔1秒执行一次
        setInterval(repeat,1000)


        //其他写法 setInterval(匿名函数,间隔时间
        // setInterval(function(){} , 1000)
        setInterval(function(){
            console.log('wwwww')
        },1000)

    </script>

清除定时器

清除定时器 一般不会刚创建就停止,都是要根据满足某个条件了再来清除。

注意:

  • 函数名字不需要加括号。
  • 定时器返回的是一个id数字 。

写法:

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) {
          // 到30次了 清除定时器
          clearInterval(timeId);
        }
      }, 100);
    </script>