JavaScript APIs

第一章节

01-声明变量

01-1 声明变量优先使用哪个?
  • const
  • 有了变量先给const,如果发现它后面是要被修改的,再改为let
01-2 为什么const声明的对象可以修改里面的属性?
  • 因为对象是引用类型,里面存储的是地址,只要地址不变,就不会报错
  • 建议数组和对象使用const来声明
01-3 什么时候使用let声明变量?
  • 如果基本数据类型的值或者引用类型的地址发生变化的时候,需要用let
  • 比如:一个变量进行加减运算,比如:for循环中的i++

02-DOM树和DOM对象

02-1 DOM树是什么?
  • 将HTMl文档以树状结构直观的表现出来,我们称为文档树或DOM树
  • 作用:文档树直观的体现了标签与标签之间的关系
02-2 DOM对象怎么创建的?
  • 浏览器根据HTML标签生成的JS对象(DOM对象)
  • DOM的核心就是把内容当对象来处理
02-3 document是什么?
  • 是DOM里提供的一个对象
  • 网页所有内容都在document里面

03-获取DOM元素

03-1 querySelector()和querySelectorAll()的区别?
  • querySelector() 只能选择一个元素,可以直接操作
  • querySelectorAll() 可以选择多个元素,得到的是伪数组,需要遍历得到每一个元素
03-2 他们两者小括号里的参数有什么注意事项?

必须是字符串,也就是必须加引号 const div = document.querySelectorAll(‘div’)**

03-3 代码实例:
<body>
    <div class="box">HELLO WORLD!!!</div>
    <div class="box2">HELLO WORLD2!!!</div>

    <p id="nav">导航栏</p>

    <ul>
        <li>测试1</li>
        <li>测试2</li>
        <li>测试3</li>
        <li>测试4</li>
    </ul>
    <script>
        //获取匹配的第一个div(只会选择第一个)
        const con = document.querySelector('div')
        console.log(con)

        //也可根据类名指定选择
        const con2 = document.querySelector('.box2')
        console.log(con2)
        
        const nav = document.querySelector('#nav')
        console.log(nav)

        //获取ul中第一个li
        const li = document.querySelector('ul li:first-child')
        console.log(li)

        console.log('-----------')
        
        //获取ul中所有的li
        const lis = document.querySelectorAll('ul li')
        console.log(lis)

        console.log('-----------')

        //通过for循环遍历每一个元素li
        const lies = document.querySelectorAll('ul li')
        for(let i = 0; i < lies.length; i++){
            console.log(lies[i])
        }
        
        console.log('-----------')

        //获取所有div
        const divs = document.querySelectorAll('div')
        console.log(divs)
        
    </script>
</body>

Console输出结果:
请添加图片描述

03-4 其他获取DOM元素方法(了解)
//根据id获取一个元素
document.getElementById('nav')

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

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

04-修改元素常见的属性

<body>
    <img src="/01-code/image/01.jpg" alt="">
    <script>
        //1、获取图片元素
        const abulm = document.querySelector('img')
        //2、修改图片对象的属性  对象.属性 = 值
        abulm.src = "/01-code/image/02.jpg"  //修改
        abulm.title = '我的帅照'              //新增
    </script>
</body>

05-随机显示图片

<body>
    <img src="/01-code/image/1.jpg" alt="">
    <script>
        //取到N ~ M 的随机整数
        function getRandom(N , M){
            return Math.floor(Math.random() * (M - N + 1)) + N
        }
        //1、获取图片对象
        const img = document.querySelector('img')
        //2、随机得到序号
        const random = getRandom(1,11)
        //3、更换路径
        img.src = `/01-code/image/${random}.jpg`
    </script>
</body>

06-通过style属性修改样式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>通过style属性修改样式</title>
    <style>
        .box{
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <script>
        const con = document.querySelector('.box')

        //修改样式属性 对象.style.样式属性 = '值'
        con.style.height = '200px'
        
        //多组单词的采取 小驼峰命名法
        con.style.borderRadius = '50%'
        con.style.backgroundColor = 'hotpink'
    </script>
</body>
</html>

07-随机更换背景图片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>随机更换背景图片</title>
    <style>
        body{
            background: url(/01-code/image/10.jpg) no-repeat top center/cover;
        }
    </style>
</head>
<body>
    <script>
        // console.log(document.body)
        function getRandom(N , M){
            return Math.floor(Math.random() * (M - N + 1)) + N
        }
        const random = getRandom(1,11)
        document.body.style.backgroundImage = `url(/01-code/image/${random}.jpg)`
    </script>
</body>
</html>

08-通过类名修改样式

08-1 使用className有什么好处?

可以同时修改多个样式

08-2 使用className有什么注意事项?

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

08-3 代码实例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>通过类名修改样式</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .nav{
            color: aliceblue;
        }

        .box{
            width: 300px;
            height: 300px;
            background-color: hotpink;
            border-radius: 20px;
            margin: auto;
        }
    </style>
</head>
<body>
    <div class="nav">123</div>
    <script>
        // const con = document.querySelector('div')
        //添加类名,由于class是个关键字,我们使用className替代class
        // con.className = 'box'    //最终代码识别为<div class="box"></div>

        //若div想同时满足nav和box的属性,则
        const con = document.querySelector('div')
        con.className = 'nav box'
    </script>
</body>
</html>

09-通过classList修改样式

09-1 追加一个类
元素.classList.add('类名')
09-2 删除一个类
元素.classList.remove('类名')
09-3 切换一个类
//先判断有还是没有这个类,有就删除,没有就加上
元素.classList.toggle('类名')
09-4 使用className和classList的区别?
  • classList是追加和删除,并不影响以前的类名
09-5 代码实例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>通过classList修改样式</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .active1{
            width: 300px;
            height: 300px;
            background-color: hotpink;
        }

        .active2{
            border-radius: 20px;
            margin: auto;
        }
    </style>
</head>
<body>
    <div class="box active2">Hello World!!!</div>
    <script>
        const con = document.querySelector('.box')
        //1、追加类 add()   类名不加点,并且是字符串
        con.classList.add('active1')

        //2、删除类 remove()   类名不加点,并且是字符串
        con.classList.remove('active1')

        //3、切换类 toggle() 首先判断有还是没有这个类,有就删除,没有就加上
        con.classList.toggle('active2')
    </script>
</body>
</html>

10-修改表单元素

<body>
    <input type="text" name="" id="" value="Hello">
    <input type="checkbox" name="" id="">
    <script>
        //获取元素
        const uname = document.querySelector('input')
        //获取值
        console.log(uname.value)     //text
        console.log(uname.innerHTML) //innerHTML得不到表单的内容
        //设置表单的值
        uname.value = 'Hello World!!!'
        console.log(uname.type)  //text
        uname.type = 'password'  //此时文本框内容不显示,由text变为password
        console.log(uname.type)  //password

        console.log('---------两个input不能同时执行--------');
        
        const ipt = document.querySelector('input')
        console.log(ipt.checked)   //false(只接受布尔值)
        ipt.checked = true
        ipt.checked = 'true'  //也会选中,不提倡,因为涉及隐式转换
        console.log(ipt.checked)  //true
    </script>
</body>

11-自定义属性

11-1 标准属性:

标签天生自带的属性,比如class id title等,可以直接使用点语法操作。比如:disabled、checked、selected

11-2 自定义属性:
  • 在html5中推出来了专门的data-自定义属性
  • 在标签上一律以data-开头
  • 在DOM对象上一律以dataset对象方式获取
11-3 代码示例:
<body>
    <div data-box1="I" data-box11="LOVE" data-box111="YOU">1</div>
    <div data-box2="ME">2</div>
    <div data-box3="MY">3</div>
    <script>
        const one = document.querySelector('div')
        console.log(one.dataset)   //DOMStringMap{}
        console.log(one.dataset.box1)  //I
        console.log(one.dataset.box11) //LOVE
        console.log(one.dataset.box111) //YOU
        
    </script>
</body>

12-定时器-间歇函数

12-1 设定计时器
setInterval(函数,时间)
12-2 结束计时器
clearInterval(计时器专属id号)

//例如:
let n = setInterval(fn,3000)
clearInterval(n)
12-3 注意事项:
//函数可写成匿名函数,如:
let n = setInterval(function (){
	console.log('三秒执行一次')
},3000)

//也可具名函数,如:
function fn(){
	console.log('三秒执行一次')
}
let n = setInterval(fn,3000)
12-4 代码实例:
<script>
    //setInterval(函数,间隔时间(以毫秒为单位))

    //匿名函数
    let num1 = setInterval(function (){
        console.log('一秒执行一次')
    },1000)
    console.log(num1)  //1 即第2个定时器


    //具名函数
	//函数不用加小括号,否则为调用
    function fn(){
        console.log('1/10秒执行一次')

    }
    let num2 = setInterval(fn,100)
    console.log(num2)  //2 即第2个定时器
    //关闭定时器
    clearInterval(num2)

    let i = 0
    setInterval(function () {
        i++
        document.write(`${i}</br>`)
    },1000)
</script>

13-阅读协议倒计时

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>阅读协议倒计时</title>
</head>
<body>
    <textarea name="" id="" cols="50" rows="20">
        用户注册协议:
        一、协议主体与生效
		二、服务内容与范围
		三、用户权利与义务
        (一)用户权利
        (二)用户义务
        四、我方权利与义务
        (一)我方权利
        (二)我方义务
        五、数据收集与保护
        六、服务费用与支付
        七、免责声明
        八、违约责任
        九、协议变更与终止
        十、争议解决与其他
    </textarea>
    <br>
    <button class="btn" disabled>我已经阅读用户协议(5)</button>
    <script>
        //1、获取元素
        const btn = document.querySelector('.btn')
        console.log(btn.innerHTML)  //我已经阅读用户协议(5)
        //2、倒计时
        let i = 5
        //2.1、开启倒计时
        let n = setInterval(function(){
            i--
            btn.innerHTML = `我已经阅读用户协议(${i})`
            if (i === 0) {
                clearInterval(n)
                //定时器停止后,随即启用button
                btn.disabled = false
            btn.innerHTML = `我同意此用户协议`
            }

        },1000)
    </script>
</body>
</html>

第二章节

01-事件监听

01-1 什么是事件监听?

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

01-2 事件监听三要素是什么?
  • 事件源(谁被触发了)
  • 事件类型(用什么方式触发,点击还是鼠标经过等)
  • 事件处理程序(要做什么事情)
01- 3 代码实例:
<body>
    <button>点击</button>
    <script>
        //需求:点击了按钮,弹出一个对话框
        //1、事件源 按钮
        // 2、事件类型 点击鼠标 click(字符串)
        //3、事件处理程序 弹出对话框
        const btn = document.querySelector('button')
        btn.addEventListener('click',function(){
            alert('Hello World!!!!!!')
        })
    </script>
</body>

02-点击关闭广告

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>关闭广告</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }

        .box{
            width: 300px;
            height: 200px;
            background-color:pink;
            margin: 700px 0px;
            /* display: none; */
        }

        .close{
            width: 80px;
            height: 20px;
            /* border: 1px solid red; */
            cursor: pointer;
            padding: 10px 10px;
            font-size: 14px;
        }

        .close:hover{
            background-color: red;
            color: aliceblue;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="close">× 点击关闭</div>
    </div>
    <script>
        const con = document.querySelector('.box')
        const off = document.querySelector('.close')
        off.addEventListener('click',function(){
            con.style.display = 'none'
        })
    </script>
</body>
</html>

03-添加事件并开启与关闭定时器

03-1 添加事件并开启定时器
//1、开启按钮
const start = document.querySelector('.start')
//3、定时器的全局变量
let timerId = 0
//3、添加点击事件
start.addEventListener('click',function () {
    //4、添加定时器
    timerId = setInterval(function (){
    	document.write('我爱你~')
    },3000)
})
03-2 添加事件并结束定时器
//关闭按钮
const end = document.querySelector('.end')
end.addEventListener('click',function (){
    clearInterval(timerId)
})
03-3 综合案例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>添加事件并开启与关闭定时器</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        
        .btns {
            text-align: center;
        }

        .btns button {
            width: 120px;
            height: 35px;
            margin: 0 50px;
        }
    </style>
</head>
<body>
    <div class="btns">
        <button class="start">开始</button>
        <button class="end">结束</button>
    </div>
    <script>
        //1、开启按钮
        const start = document.querySelector('.start')
        //3、定时器的全局变量
        let timerId = 0
        //3、添加点击事件
        start.addEventListener('click',function () {
            //4、添加定时器
            timerId = setInterval(function (){
                console.log('我爱你~')
            },1000)
        })

        //关闭按钮
        const end = document.querySelector('.end')
        end.addEventListener('click',function (){
            clearInterval(timerId)
        })
    </script>
</body>
</html>

04-随机点名案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>随机点名</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }

        h2{
            margin: 20px auto;
            text-align: center;
        }

        .box{
            width: 600px;
            margin: 50px auto;
            display: flex;
            font-size: 25px;
            line-height: 40px;
        }

        .name{
            width: 450px;
            height: 40px;
            color: red;
        }

        .btns {
            text-align: center;
        }

        .btns button {
            width: 120px;
            height: 35px;
            margin: 0 50px;
        }
    </style>
</head>
<body>
    <h2>随机点名</h2>
    <div class="box">
        <span>幸运儿是:</span>
        <div class="name">这里显示名字</div>
    </div>
    <div class="btns">
        <button class="start">开始</button>
        <button class="end">结束</button>
    </div>
    
    <script>
        //1、数组数据
        const arr = ['张飞','赵云','关羽','马超','黄忠']

        //开始按钮
        //2、获取开始按钮
        const start = document.querySelector('.start')
        //5、获取name并进行替换
        const name = document.querySelector('.name')
        //7、定时器的全局变量
        let timerId = 0
        //8、随机号要全局变量
        let random = 0
        //3、添加点击事件
        start.addEventListener('click',function () {
            //6、添加定时器
            timerId = setInterval(function (){
                
            //最后:如果数组中只剩最后一个值,不再进行抽取,同时禁用按钮
            if(arr.length === 1){
                // start.disabled = true
                // end.disabled = true
                start.disabled = end.disabled = true
                return  //一定要返回
            }

                //4、生成随机数
                // const random = Math.floor(Math.random() * arr.length)
                //8、将random设为全局变量,并将const设为let
                random = Math.floor(Math.random() * arr.length)

                // console.log(random)
                console.log(arr[random])  //控制台检验是否正常抽取
                name.innerHTML = arr[random] //将抽取的名字替换到div.name中
            },50)
        })

        //关闭按钮
        const end = document.querySelector('.end')
        end.addEventListener('click',function (){
            clearInterval(timerId)
            //结束时,删除当前抽取的数组元素(避免重复抽名)
            arr.splice(random,1)
            console.log(arr)  //检验删除选中名字后,数组中剩余名字
        })
    </script>
</body>
</html>

请添加图片描述

05-事件类型

05-1 鼠标事件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>鼠标事件</title>
    <style>
        div {
            width: 300px;
            height: 300px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        const div = document.querySelector('div')
        //鼠标经过
        div.addEventListener('mouseenter',function (){
            console.log('轻轻的我来了')
        })
        //鼠标离开
        div.addEventListener('mouseleave',function (){
            console.log('轻轻的我走了')
        })
    </script>
</body>
</html>
05-2 焦点事件
<body>
    <input type="text">
    <script>
        const input = document.querySelector('input')
        input.addEventListener('focus',function (){
            console.log('有焦点触发')
        })
        input.addEventListener('blur',function (){
            console.log('失去焦点触发')
        })
    </script>
</body>
05-2-- 代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>小米搜索框</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
            box-sizing: border-box;
        }

        ul{
            list-style: none;
        }

        .mi{
            position: relative;
            width: 223px;
            margin: 100px auto;
        }

        .mi input{
            width: 223px;
            height: 48px;
            padding: 0 10px;
            font-size: 14px;
            line-height: 48px;
            border: 1px solid #e0e0e0;
            outline: none;
        }

        .mi .search{
            border: 1px solid #ff6700;
        }

        .result-list{
            display: none;
            position: absolute;
            left: 0;
            top: 48px;
            width: 223px;
            border: 1px solid #ff6700;
            border-top: 0;
            background: #fff;
        }

        .result-list a {
            display: block;
            padding: 6px 15px;
            font-size: 12px;
            color: #424242;
            text-decoration: none;
        }

        .result-list a:hover{
            background-color: #eee;
        }
    </style>
</head>
<body>
    <div class="mi">
        <input type="search" placeholder="小米笔记本">
        <ul class="result-list">
            <li><a href="#">全部商品</a></li>
            <li><a href="#">平板电脑</a></li>
            <li><a href="#">小米17Pro</a></li>
            <li><a href="#">洗衣机</a></li>
            <li><a href="#">小米笔记本</a></li>
            <li><a href="#">冰箱</a></li>
            <li><a href="#">空调</a></li>
        </ul>
    </div>
    <script>
        //1、获取元素
        const input = document.querySelector('[type=search]')  //属性选择器
        const ul = document.querySelector('.result-list')
        console.log(input)  //测试打印
        //2、监听事件 获得焦点
        input.addEventListener('focus',function (){
            //ul显示
            ul.style.display = 'block'
            //添加一个带有颜色边框的类名
            input.classList.add('search')
        })
        //3、监听事件 失去焦点
        input.addEventListener('blur',function (){
            //ul隐藏
            ul.style.display = 'none'
            //添加一个带有颜色边框的类名
            input.classList.remove('search')
        })
    </script>
</body>
</html>
05-3 键盘事件
<body>
    <input type="text">
    <script>
        //1、键盘事件
        const input = document.querySelector('input')
        input.addEventListener('keydown',function (){
            console.log('键盘按下了')
        })
        input.addEventListener('keyup',function (){
            console.log('键盘弹起了')
        })
        //2、用户输入文本事件
        input.addEventListener('input',function (){
            console.log(input.value)
        })
    </script>
</body>

06-事件对象event以及常见属性

06-1 事件对象是什么
  • 也是个对象,这个对象里有事件触发时的相关信息
  • 例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息
06-2 使用场景
  • 可以判断用户按下哪个键,比如按下回车键可以发布评论
  • 可以判断鼠标点击了哪个元素,从而做相应的操作
06-3 代码示例:
<body>
    <button>点击</button>
    <input type="text">
    <script>
        const btn = document.querySelector('button')
        btn.addEventListener('click',function (e){
            console.log(e)   //PointerEvent
        })

        const input = document.querySelector('input')
        input.addEventListener('keyup',function (e){
            //console.log(e.key)  //监听键盘按下的是哪一个
            if(e.key === 'Enter'){
                console.log('我按下了回车键')
            }
        })
    </script>
</body>

07-trim()方法

<body>
    <textarea name="" id=""></textarea>
    <script>
        const str = '   我 爱你  '
        console.log(str.trim())
        const tx = document.querySelector('textarea')
        tx.addEventListener('keyup',function (e){
            if(e.key === 'Enter'){
                console.log(tx.value.trim());
            }
        })
    </script>
</body>

08-环境对象

08-1 含义

环境对象:指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境

08-2 作用

弄清楚this的指向,可以让我们代码更简洁

08-3 判断this指向的粗略规则是社么?

【谁调用,this就是谁】

08-4 代码示例:
<body>
    <button>点击</button>
    <script>
        function fn() {
            console.log(this)
        }
        window.fn()

        console.log('=-=-=-=-=-=-=-=-=')
        
        const btn = document.querySelector('button')
        btn.addEventListener('click',function (){
            console.log(this)  //this指向btn对象
        })
    </script>
</body>

Console输出结果:
请添加图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐