WebAPI 1-2

113 阅读2分钟

WebAPI

第一节

WebAPI的作用和分类

作用: 就是使用 JS 去操作 html 和浏览器 分类:DOM (文档对象模型)、BOM(浏览器对象模型)

DOM

DOM(Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的API

DOM树

1648957844267.png

DOM对象(重要)

DOM对象:浏览器根据html标签生成的 JS对象

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

document 对象:是 DOM 里提供的一个对象/网页所有内容都在document里面

获取DOM对象
<body>
    <div>获取元素123</div>
    <div>获取元素456</div>
    <!-- <input type="text"> -->




    <script>
    //    语法              选择器
    document.querySelector('div')

    // 两个同样的选择器,只会显示第一个
    let divDom = document.querySelector('div')
    let inpDom = document.querySelector('input')
    
    // 要用console.dir来显示,.log有时会显不出来
    console.dir(divDom) //输出是:获取元素123
    console.dir(inpDom ) //输出是:null

    </script>
</body>
动态修改dom元素内容
<body>

    <h1>我想去旅游</h1>
    <h2></h2>
    <script>
      let address = prompt('去哪旅游')
    //   先获取是那个标签想要修改里面的文本内容
      let h2Dom = document.querySelector('h2')
       //修改标签里面的文本,dom元素.innerText = 想要放的文本
        h2Dom.innerText = address

    </script>
获取多个dom元素
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <script>
        // 获取所有的li,返回的是一个数组,选择器无论选择什么,它的返回值都是数组
          document.querySelectorAll('li')
          let lis = document.querySelectorAll('li')
          for (let index = 0; index < lis.length; index++) {
             lis[index].innerText = `这是第${index + 1}个标签`
              
          }
          console.dir(lis)
    </script>
</body>
其他获取DOM元素方法
<body>

    <div class="nav">我是nav</div>
    <h1 id="ids">我是标题</h1>
    <div class="navbar">我是navbar</div>
    <script>
//    通过id选择器获取单个标签
   document.getElementById('ids')
//    通过标签获取一类,输出是数组
   document.getElementsByTagName('div')
//    通过类名获取一类,输出是数组
   document.getElementsByClassName('nav')
    
    </script>
</body>

1648969145404.png

设置/修改DOM元素

1. document.write()
2. 元素innerText 属性
3. 元素.innerHTML 属性
<body>
    <div class="nav">我是一个盒子</div>
    
    <p>我想吃牛肉</p>
    
    <script>
            // 只能把标签写在body里面
        document.write(`<BUtton>我已经灭有用了</BUtton>`)
        //    只能设置文本。不能解析html字符串 
        document.querySelector('div').innerText = '<BUtton>我是一个按钮</BUtton>' //输出:          <BUtton>我是一个按钮</BUtton>
        // 既能设置文本。也能解析html字符串
        document.querySelector('p').innerHTML = '<BUtton>我是一个按钮</BUtton>' // 有按钮形状的文字


//    innerText 和 innerHTML,主要设置双标签里面的文本内容
    </script>
</body>
4.修改属性
<body>
    <img src="">
    <script>
     let imgDom = document.querySelector('img')
    let imgArr =[
    '../images/01.png',
    '../images/02.png',
    '../images/03.png',
    '../images/04.png',
    ]
    let num = Math.round(Math.random() * 3)

    //相当于:img src="", x = yyy,x就是属性
     imgDom.src = imgArr[num]
        
    </script>
</body>
5.设置元素样式
通过 style 属性操作CSS
<body>
    <div>去野餐啦</div>
    <script>
        let div = document.querySelector('div')

        // 通过 style 属性操作CSS

        div.style.fontSize = '100px'
        div.style.backgroundColor = '#ccc'
        div.style.height = '500px'

        // 操作类名(className) 操作CSS
       

    </script>
操作类名(className) 操作CSS
<style>
        .box{
            width: 500px;
            height: 500px;
            background-color: rgb(212, 115, 115);
        }
        .box1{
            margin-top: 100px;
        }
    </style>
</head>
<body>
    <div>随便冰淇淋</div>
    <script>

        let div = document.querySelector('div')
        // className,会清空这个元素之前所有的样式,再用现在新加的样式
        div.className = 'box box1'
    </script>

</body>
通过 classList 操作类控制CSS
<style>
        .d1{
            width: 500px;
        }
        .d2{
            height: 600px;
        }
        .d3{
            background-color: rgb(115, 220, 113);
        }
        .d4{
            margin-top: 100px;
        }
    </style>
</head>
<body>
    <div>去吃牛肉啦</div>
    <script>
    
    let div = document.querySelector('div')
//    一次增加多个类
    div.classList.add("d3","d2","d1")
// 一次删除多个类
    div.classList.remove("d2","d3")
//  切换,如果之前有那个类,就删掉,没有就增加
div.classList.toggle('d4')
    </script>
</body>
案例设置背景颜色
<body>
    <script>
        let arr2 = [
            'url(../images/01.png)',
            'url(../images/02.png)',
            'url(../images/03.png)',
            'url(../images/04.png)',
        ]
         
        //  let num = Math.round(Math.random() * 3)
          function getColor(min,max) {
              return Math.round(Math.random() * (max - min) + min)
          }
          
          let color1 = getColor(0,255)
          let color2 = getColor(0,255)
          let color3 = getColor(0,255)

         let body = document.querySelector('body')
         body.style.backgroundColor = `rgb(${color1},${color2},${color3})`
        //  body.style.backgroundImage = arr2[num]
    </script>
</body>

定时器

开启定时器

1648980486893.png

间隔时间单位是毫秒
 <script>
        function name() {
            console.log('每秒给我一块钱');
        }
        // 1秒等于1000毫秒
        setInterval(name,1000)
        // 用匿名函数的方法

        setInterval(function(){
            console.log('每秒给我5块钱');
        },1000)
    </script>
清楚定时器
<script>
        let index = 0
        let setId = setInterval(function(){
            index++
            document.write(`第${index}秒`)
            if(index === 20){
                clearInterval(setId)
            }
        },100)
    </script>

设置修改表单元素

<body>

    <input type="text" value="我是里面的文字" class="one">
    <input type="radio" class="two" >
    <input type="checkbox" checked class="three">
    <button disabled>发送验证码</button>
    <select >
        <option >牛肉</option>
        <option >猪肉</option>
        <option >鸡肉</option>
        <option >鱼肉</option>
    </select>
    <textarea >
        <h2>我是一个文本域</h2>
    </textarea>
    <script>
       let text = document.querySelector('.one')
       let radio = document.querySelector('.two')
       let checkbox = document.querySelector('.three')
       let option = document.querySelector('option:nth-child(3)')
       let button = document.querySelector('button')
       let textarea = document.querySelector('textarea')
       text.value = '我更改了里面的文字' //value:就是代表文本里面的内容
       radio.checked = true // 选中
       checkbox.checked = false // 不选中
       option.selected = true  //表示就是页面固定选择这个
       button.disabled = false  //禁用:disabled ,true:就是禁用,false:不禁用
      
       textarea.value = '我不想做文本域了'  //推荐首选这种 ,获取的内容按原样输出
    //    textarea.innerHTML = '我又想做文本域了'  这种方法也可以 ,但是连同标签会被解析
       
    </script>
</body>

第二节

事件

1.什么是事件?

事件是在编程时系统内发生的动作或者发生的事情 比如用户在网页上单击一个按钮

2.什么是事件监听?

​ 就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为 注册事件

<body>
    <button class="one">点击我吧</button>
    <button class="two">不要点击我</button>
    <script>
        // 获取元素
       let button1 = document.querySelector('.one')
       let button2 = document.querySelector('.two')

       
    //    注册事件
    // 元素.addEventListener('事件',函数)



    // 当点击button的时候,弹出警告框  click:点击
    button1.addEventListener('click',function(){
         alert('你点疼我了')
    })

    //当鼠标移动到button2的时候,弹出警告框  mouseover:鼠标经过触发
    button2.addEventListener('mouseover',function(){
         alert('来点我吧')
    })


    </script>
常见的鼠标事件
  1. click : 鼠标点击左键触发事件

  2. mouseover :鼠标经过触发事件

  3. mouseout : 鼠标离开触发事件

  4. focusr : 获得鼠标焦点触发

  5. blu : 失去鼠标焦点触发

  6. mousemove :鼠标移动触发

  7. mouseup : 鼠标弹起触发

​ mousedown :鼠标按下触发

案例随机点名-点到停止

<body>
     <input type="text" value=""> <br>
     <button class="one">点击随机点名</button>
     <button class="two">停止点名</button>
    <script>
        //   点击随机,名字开始循环无序播放,点击停止,就停下来
        let num = ['黄忠','赵云','关羽','张飞','刘备']
        let input = document.querySelector('input')
        let button1 = document.querySelector('.one')
        let button2 = document.querySelector('.two')
        
        let setIn
        //节流,先点击多次button1,就相当于开启了多个定时器,再点击结束按钮时,会发现也无法停止,因为点击停止时,只结束了一个定时器,其他定时器还在执行
        button1.addEventListener('click',function(){
            //解决方法2:在开启定时器前,先清除定时器,开启一次,清楚一次
            clearInterval(setIn)
            setIn =  setInterval(function(){
           
            let num1 = Math.round(Math.random() * 4)
            input.value = num[num1]
        //解决方法1,点击时,就禁用
        // button1.disabled = true
            
          },10)
      
           
              
        })
        
        button2.addEventListener('click',function(){
         clearInterval(setIn)
          //1.结束按钮被点击时,再启用
        //   button1.disabled = false
        
        })
    </script>
</body>

案例商品全选,单选复选框

 <style>
      * {
        margin: 0;
        padding: 0;
      }

      table {
        border-collapse: collapse;
        border-spacing: 0;
        border: 1px solid #c0c0c0;
        width: 500px;
        margin: 100px auto;
        text-align: center;
      }

      th {
        background-color: #09c;
        font: bold 16px '微软雅黑';
        color: #fff;
        height: 24px;
      }

      td {
        border: 1px solid #d0d0d0;
        color: #404060;
        padding: 10px;
      }

      .allCheck {
        width: 80px;
      }
    </style>
  </head>

  <body>
    <table>
      <tr>
        <th class="allCheck">
          <input type="checkbox" name="" id="checkAll" />
          <span class="all">全选</span>
        </th>
        <th>商品</th>
        <th>商家</th>
        <th>价格</th>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck" />
        </td>
        <td>小米手机</td>
        <td>小米</td>
        <td>¥1999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck" />
        </td>
        <td>小米净水器</td>
        <td>小米</td>
        <td>¥4999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck" />
        </td>
        <td>小米电视</td>
        <td>小米</td>
        <td>¥5999</td>
      </tr>
    </table>


    <script>
        // 当全选的时候,其余全部选中。
        let allCheck = document.querySelector('#checkAll')
        let ck = document.querySelectorAll('.ck') // 这是个数组啊!!!!


        // 商品全选功能


        allCheck.addEventListener('click',function(){
        //     allCheck.checked = true  
        //   ck.checked = allCheck.checked
        for (let index = 0; index < ck.length; index++) {
           ck[index].checked = allCheck.checked
            
        }
            
        })
        // 当三个选中,全选也选中

        //  商品单个全部都被选中,全选也被选中功能

        for (let index = 0; index < ck.length; index++) {
          //3.每个框被点击的时候,就会去执行判断。每个框是否都是 选中的,是的话,就去选中全选框
          ck[index].addEventListener('click',name)
        }
        
        // 每点击一次,就会执行一次判断,所以对判断的内容进行封装使用
        function name() {
          let num = 0
        for (let index = 0; index < ck.length; index++) {
           //1.当复选框得状态时选中得时候,num就加1
         ck[index].checked === true? num++ : num
        }
        //2.当num的数字等于数组的长度时,全款款就选中
         num === ck.length? allCheck.checked = true : allCheck.checked = false
        }
       
        
    </script>
  </body>
</html>

巧妙的思路:用一个变量去储存选中的状态,当变量的数字等于数组的长度时,即可勾选全选

事件类型

鼠标事件
<body>
    <div></div>

    <!-- 只有表单 元素 有获得焦点 失去焦点事件 -->
    <input type="text" />
    <script>
      // 获取div元素
      let div = document.querySelector('div');
      let input = document.querySelector('input');

      // 绑定不同的事件
      // div.addEventListener("click",function () {
      //   console.log("click 鼠标点击事件");
      // })

      // 鼠标经过元素,
      // div.addEventListener("mouseenter",function () {
      // console.log("mouseenter 鼠标经过");
      // })

      // 鼠标离开元素,要离开元素的范围才会触发
      // div.addEventListener("mouseleave",function () {
      // console.log("mouseleave 鼠标离开");
      // })

      // 鼠标经过
      // div.addEventListener("mouseover",function () {
      //   console.log("mouseover 鼠标经过");
      // })

      // 鼠标离开,只要鼠标一移动就触发
      // div.addEventListener("mouseout",function () {
      //   console.log("mouseout 离开");
      // })
焦点事件
// 获得焦点
      // input.addEventListener("focus",function () {
      //   console.log("输入框 获得焦点 ");
      //   document.body.style.backgroundColor='#000'
      // })

      // // 失去焦点 
      // input.addEventListener("blur",function () {
      //   console.log("输入框 失去焦点");
      //   document.body.style.backgroundColor='#fff'
      // })
键盘事件
 // 键盘按下事件 div不行 表单可以 
      // 给body标签添加比较多
      // document.body.addEventListener("keydown",function () {
      //   console.log("keydown 按下");
      // })

      // 键盘抬起
      // document.body.addEventListener("keyup",function () {
      //   console.log("keyup 抬起");
      // })
      
文本事件
 // 输入事件 输入框
      // input.addEventListener("input",function () {
      //   console.log("只要你在我的输入框输入了内容,我就触发");
      // })