Web APIs 第二天

133 阅读3分钟

Web APIs 第二天

设置/修改表单元素属性

表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框 正常的有属性有取值的 跟其他的标签属性没有任何区别

DOM对象.属性名 = 新值

    <script>
        let text1 = document.querySelector('.text1')
        // text1.value = '什么东西'
        text1.placeholder = '看什么东西'
     </script>

单选多选框默认选中

<body>
    <input type="checkbox">
    <script>
        //多选框
        let input = document.querySelector('input')
        //默认选中
        input.checked = true
        //默认勾选
        input.checked = false
    </script>
</body>

按钮禁用

<body>
    <button>按钮</button>
    <script>
        let button = document.querySelector('button')
        //按钮禁用,true为禁用,false为启用
        button.disabled = true
        button.disabled = false
    </script>
</body>

下拉列表默认选中

<body>
    <select>
        <option>非洲</option>
        <option>亚洲</option>
        <option>欧洲</option>
    </select>
    <script>
        //选取第二个option
        let option = document.querySelector('option:nth-child(2)')
        //选中为默认勾选
        option.selected = true
    </script>
</body>

文本域

<body>
<textarea></textarea>
    <script>
        
        let text = document.querySelector('textarea')
        //三种输入文本内容一样
        // text.value = 'hello'
        // text.innerText = 'hello1'
         text.innerHTML = '<h1>hello1</h1>'//不会解析标签
        console.log(textarea.value)
        console.log(textarea.innerText)//控制台不显示
        console.log(textarea.innerHTML)
    </script>
</body>

事件监听

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

语法: 元素.addEventListener('事件',要执行的函数)

事件监听三要素 事件源: 那个dom元素被事件触发了,要获取dom元素 事件: 用什么方式触发,比如鼠标单击 click、鼠标经过 mouseover 等 事件调用的函数: 要做什么事

举例

<body>
    <button></button>
    <script>
        //定义DOM
        let but = document.querySelector('button')
        //点击事件
        but.addEventListener('click',function(){
            console.log('你好')
        })
    </script>
</body>

案例1

需求:点击关闭之后,图片关闭

<body>
    <div>
        <button>X</button>
    </div>
    
    <script>
        //定义DOM
        let but = document.querySelector('button')
        let div = document.querySelector('div')
        //点击按钮,div盒子消失
        but.addEventListener('click',function(){
            div.style.display = 'none'
        })
    </script>
</body>

案例2

需求:点击按钮之后,随机显示一个名字,如果没有显示则禁用按钮

<body>
    <div>
    </div>
    <button class="but1">点击随机抽名</button>
    <button class="but2">暂停</button>
    
    <script>
        //定义DOM
        let but = document.querySelector('.but1')
        let but2 = document.querySelector('.but2')
        let div = document.querySelector('div')
        let num =['王','四','李','三','张']
        let timeId
        //一个按钮开启定时器,随机点名,因为点击一次按钮就能开启一个定时器,因此关闭的时候会产生bug
        //因此点击一次,就启用禁用按钮,关闭定时器之后,再开启按钮
        but.addEventListener('click',function(){
            timeId = setInterval(function(){
                let num2 = Math.round(Math.random()* (num.length - 1))
                div.innerText = num[num2]
            })
            but.disabled = true
        })
        //一个按钮,关闭定时器
        but2.addEventListener('click',function(){
            clearInterval(timeId)
            but.disabled = false
        })
    </script>

事件监听版本

DOM L0:事件源.on事件 = function() { } DOM L2 :事件源.addEventListener(事件, 事件处理函数)

事件类型

鼠标事件: click 鼠标点击 mouseenter 鼠标经过 mouseleave 鼠标离开 焦点事件: focus 获得焦点 blur 失去焦点 键盘事件: keydown 键盘按下触发 keyup 键盘抬起触发 文本事件: input 用户输入事件

案例3

需求:当表单得到焦点,显示下拉菜单,失去焦点隐藏下来菜单

<body>
    <div class="mi">
        <input type="search" placeholder="小米笔记本" />
        <ul class="result-list">
            <li><a href="#">全部商品</a></li>
            <li><a href="#">小米11</a></li>
            <li><a href="#">小米10S</a></li>
            <li><a href="#">小米笔记本</a></li>
            <li><a href="#">小米手机</a></li>
            <li><a href="#">黑鲨4</a></li>
            <li><a href="#">空调</a></li>
        </ul>
    </div>
    <script>
        let input = document.querySelector('input')
        let ul = document.querySelector('.result-list')
        input.addEventListener('focus',function(){
            ul.style.display = 'block'
            input.style.border = '1px solid #ff6700'
        })
        input.addEventListener('blur',function(){
            ul.style.display = 'none'
            input.style.border = '1px solid #e0e0e0'
        })
    </script>
</body>

案例4

需求:用户输入文字,可以计算用户输入的字数

<body>
    <div class="w">
        <div class="controls">
            <img src="" alt="" /><br />
            <textarea placeholder="说点什么吧..." id="area" cols="30" rows="10" maxlength="200"></textarea>
            <div>
                <span class="useCount">0</span>
                <span>/</span>
                <span>200</span>
                <button id="send">发布</button>
            </div>
        </div>
        <div class="contentList">
            <ul></ul>
        </div>
    </div>
    <script>
        let textarea = document.querySelector('#area')
        let span = document.querySelector('.useCount')
        textarea.addEventListener('input',function(){
            span.innerHTML = textarea.value.length
        })
    </script>
</body>

全选文本框案例5

需求:用户点击全选,则下面复选框全部选择,取消全选则全部取消,文字对应变化

<!DOCTYPE html>

<html>

<head lang="en">
    <meta charset="UTF-8" />
    <title>01-全选商品</title>
    <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 input1 = document.querySelector('#checkAll')
        let input2 = document.querySelectorAll('.ck')
        input1.addEventListener('click',function(){
            for (let index = 0; index < input2.length; index++) {
                input2[index].checked = input1.checked
                
            }
        })
    </script>
</body>

</html>

全选文本框案例6

需求:用户点击全选,则下面复选框全部选择,取消全选则全部取消,文字对应变化

    <script>
        let input1 = document.querySelector('#checkAll')
        let input2 = document.querySelectorAll('.ck')
        for (let index = 0; index < input2.length; index++) {
            input2[index].addEventListener('click', function () {
                let checked = name()
                input1.checked = checked
            })
        }
        function name() {
            let i = 0
            for (let index = 0; index < input2.length; index++) {

                if (input2[index].checked) {
                    i++
                }
                console.log(i)

            }
            if (i === 3) {
                return true
            } else {
                return false
            }
        }
    </script>

案例7

需求:用户点击加号,则文本框+1,点击减号,则文本框-1,如果文本框为1,则禁用减号

<!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>
        div{
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div>1</div>
    <button class="but1">+</button>
    <button class="but2" disabled>-</button>
    <script>
        let but1 = document.querySelector('.but1')
        let but2 = document.querySelector('.but2')
        let div = document.querySelector('div')
        console.log(div.value);
        console.log(div.innerHTML);
        console.log(div.innerText);
        but1.addEventListener('click',function(){
            div.innerText++
            but2.disabled = false
        })
        but2.addEventListener('click',function(){
            div.innerText--
            
            if(div.innerText == 1){
                but2.disabled = true
            }
        })
    </script>
</body>
</html>

环境变量

目标:能够分析判断函数运行在不同环境中 this 所指代的对象

环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境 作用:弄清楚this的指向,可以让我们代码更简洁 函数的调用方式不同,this 指代的对象也不同 【谁调用, this 就是谁】 是判断 this 指向的粗略规则 直接调用函数,其实相当于是 window.函数,所以 this 指代 window

排他思想 当前元素为A状态,其他元素为B状态

使用

干掉所有人,使用for循环 复活他自己,通过this或者下标找到自己或者对应的元素

案例8

需求:点击不同的选项卡,底部可以显示 不同的内容

<body>
    <div class="wrapper">
        <ul class="tab">
            <li class="tab-item active">国际大牌<span></span></li>
            <li class="tab-item">国妆名牌<span></span></li>
            <li class="tab-item">清洁用品<span></span></li>
            <li class="tab-item">男士精品</li>
        </ul>
        <div class="products">
            <div class="main active">
                <a href="###"><img src="./tab栏案例/imgs/guojidapai.jpg" alt="" /></a>
            </div>
            <div class="main">
                <a href="###"><img src="./tab栏案例/imgs/guozhuangmingpin.jpg" alt="" /></a>
            </div>
            <div class="main">
                <a href="###"><img src="./tab栏案例/imgs/nanshijingpin.jpg" alt="" /></a>
            </div>
            <div class="main">
                <a href="###"><img src="./tab栏案例/imgs/qingjieyongpin.jpg" alt="" /></a>
            </div>
        </div>
    </div>

    <script>
        let lis = document.querySelectorAll('.tab-item')
        let imgs = document.querySelectorAll('.main')
        for (let index = 0; index < lis.length; index++) {
            lis[index].addEventListener('click',function(){
                for (let index1 = 0; index1 < lis.length; index1++) {
                    lis[index1].classList.remove('active')
                    
                }
                this.classList.add('active')
                for (let index1 = 0; index1 < imgs.length; index1++) {
                    imgs[index1].classList.remove('active')
                    
                }
                imgs[index].classList.add('active')
            })
        }
    </script>
</body>

字符串(扩展)

    <script>
        // 1 需要用到  表单的input事件 
// 2 如何统计文字个数   字符串 看成是数组 (拥有一点点数组的特点)
// 字符串有 数组的长度length
//  let str="你们好呀";  str[0]=你  str[1]=们
// 字符串也可以循环
     // console.log("aa".length);
// console.log("aab".length);
// console.log("aabb".length);

// let str="你们好呀123";
// console.log(str.push);

// console.log(str[0]);
// console.log(str[1]);
// console.log(str[2]);

// for (let index = 0; index < str.length; index++) {
//     console.log(str[index]);
// }

//let input=document.querySelector("input")
// 绑定input事件
// input.addEventListener("input",function () {
//   console.log(input.value.length);
// })
    </script>