1

JS的组成

image.png

Web APIs与javascript基础的区别

Web APIs是js基础的应用,大量使用js基础做页面交互效果

API 与 Web AIP的区别

  • API是提供给程序员的一种工具,以便更好的完成想要实现的功能。(充电接口)
  • Web API是浏览器提供的一套操作浏览器功能与页面元素的API(DOM与BOM)

API 与 Web API的总结

  • API是为程序员提供的一个接口,帮助我们实现某种功能,会用即可。
  • Web AIP 主要是针对于浏览器提供的接口,主要针对浏览器做交互效果
  • Web API一般都有输入和输出(函数的传参与返回值) Web ApI很多都是方法

DOM

DOM:文档对象模型,提供访问与操作网页内容的接口与方法。通过DOM,可以改变网页的结构与外观与样式

DOM树

image.png

  • 一个页面就是一个文档,DOM中用document表示
  • 页面中所有的元素被称为标签,DOM中用element表示
  • 网页中所有的内容都是节点(标签 属性 文本 注释),DOM中使用node 表示

以上内容都可以看作对象

获取元素

通过id名获取

通过getElementById(id)获取

注意事项

  • 返回元素对象
  • 参数是一个大小写敏感的字符串
  • 页面加载是从上往下加载的,所以script元素写在内容之下
  • console.dir()可以打印返回的元素对象,更好的查看元素对象的属性与方法
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">hello </div>
    <script>
        var box = document.getElementById('box');
        console.log(box) //打印元素对象
        console.log(typeof box) //查看元素对象类型
        console.dir(box)
    </script>
</body>

</html>

image.png
image

根据标签名获取元素

根据getElementsByTagName('标签名')获取
注意事项
  • 参数为一个大小写敏感的字符串
  • 返回值是一个元素对象集合,以伪数组的方式进行存储
  • 可以通过遍历获取每一个元素对象
  • 获取到的元素对象是动态的
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ul>
        <li>WEB前段自学者</li>
        <li>WEB前段自学者</li>
        <li>WEB前段自学者</li>
        <li>WEB前段自学者</li>
        <li>WEB前段自学者</li>
        <li>WEB前段自学者</li>
    </ul>

    <script>
        var lis = document.getElementsByTagName('li'); // 通过标签名来获取元素
        console.log(lis) //打印元素对象


        for (var i = 0; i < lis.length; i++) {
            console.log(lis[i]) //通过遍历获取每一个元素对象
        }
    </script>
</body>

</html>

image.png

image.png

如何获取某个元素里面的标签呢

思路

  • 可以先获取元素的id
  • 再通过id名获取标签
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 要求:获取第二个ul里面的li标签 -->
    <ul>
        <li>WEB前端</li>
        <li>WEB前端</li>
        <li>WEB前端</li>
        <li>WEB前端</li>
        <li>WEB前端</li>
        <li>WEB前端</li>
    </ul>


    <ul id="uls">
        <li>hello</li>
        <li>hello</li>
        <li>hello</li>
        <li>hello</li>
        <li>hello</li>
        <li>hello</li>
        <li>hello</li>
        <li>hello</li>
    </ul>

    <script>
        var uls = document.getElementById('uls');
        var lis = uls.getElementsByTagName('li');
        console.log(lis)
    </script>
</body>

</html>

image.png

image

根据类名获取元素(html5新增方法)

getElementsByClassName('类名')

注意事项

  • 参数为一个大小写敏感的字符串
  • 返回值为元素对象集合
  • 具有兼容性,是html5新增的方法
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="box">盒子</div>
    <div class="box">盒子</div>
    <script>
        var boxs = document.getElementsByClassName('box');
        console.log(boxs)
    </script>
</body>

</html>

image.png

image.png

通过querySelector('选择器')来获取元素

注意事项

  • 获取的是指定选择器的第一个元素对象
  • 参数里面选择器必须要加符号
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="boxs">盒子1</div>
    <div class="boxs">盒子2</div>

    <script>
        var boxs = document.querySelector('.boxs');
        console.log(boxs) //获取的是指定选择器的第一个元素对象
    </script>
</body>

</html>

image.png

通过通过querySelectorAll('选择器')来获取元素

注意事项

  • 返回值为指定选择器的所有元素对象集合
  • 参数里面的选择器必须要加符号。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ul class="box">
        <li>hello</li>
        <li>hello</li>
        <li>hello</li>
        <li>hello</li>
    </ul>
    <script>
        var boxs = document.querySelectorAll('.box');
        console.log(boxs);
        var lis = document.querySelectorAll('li');
        console.log(lis)
    </script>
</body>

</html>

image.png

获取特殊元素(html body)

image.png

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var body = document.body;
        console.log(body)
        console.dir(body)

        var html = document.documentElement;
        console.log(html)
        console.dir(html)
    </script>
</body>

</html>

image.png

事件基础

javascript使我们有能力创建动态页面,而事件是可以被javascript侦测到的行为。

触发 --->响应机制

事件三要素

  • 事件源:事件被触发的对象
  • 事件类型:触发了什么类型 如点击事件 键盘按下事件
  • 事件处理程序:采用函数赋值的方式完成
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button id="bth">锄禾日当午</button>
    <script>
        var bth = document.getElementById('bth');
        bth.onclick = function() {
            alert("汗滴禾下土")
        }
    </script>
</body>

</html>

image

事件执行的步骤

1.获取事件源

2.绑定事件

3.事件处理程序

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div>hello</div>
    <script>
        var div = document.querySelector('div');
        div.onclick = function() {
            console.log('hello 你好')
        }
    </script>
</body>

</html>

image

常见的鼠标事件

image.png

操作元素

通过DOM可以改变网页的外观 结构 内容。通过DOM来操作元素来改变元素内容 结构 样式

注意:以下都是属性来实现的

改变元素的内容

element.innerHTML

element.innerText

区别如下

  • innerHTML是W3C推荐的标准,识别HTML标签,识别空格与换行
  • innerText非W3C推荐的标准,不识别HTML标签,不识别空格与换行
  • innerHTML与innerText都是实现可读写的

案例1

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>点击显示时间</button>

    <div></div>

    <script>
        var bth = document.querySelector('button');
        var div = document.querySelector('div')

        bth.onclick = function() {
            div.innerHTML = getData()
        }

        function getData() {

            var date = new Date(); //实例化对象

            var year = date.getFullYear() //返回当前的年份
            var month = date.getMonth() + 1 //获取当前的月份,由于返回的月份比实际月份小一 所以加1 
            var dates = date.getDate(); // 获取当前日期
            var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
            var days = date.getDay() //获取当前星期几

            return '今年是:' + year + "年" + month + "月" + dates + "日 " + arr[days]
        }
    </script>

</body>

</html>

image

案例2

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div></div>
    <p>
        hello
        <span>123</span>
    </p>
    <script>
        var div = document.querySelector('div');
        div.innerHTML = '<strong>hello</strong>'

        var p = document.querySelector('p')
        console.log(p.innerHTML);
        console.log(p.innerText);
    </script>
</body>

</html>

image.png

常用元素的属性

image.png

案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        button {
            margin-right: 400px;
        }
    </style>
</head>

<body>
    <button id="spring">春天</button>

    <button id="summer">夏天</button>

    <hr>

    <img src="../upload/spring.jpg" alt="">
    <script>
        var spring = document.getElementById('spring');

        var summer = document.getElementById('summer');

        var img = document.querySelector('img')

        spring.onclick = function() {
            img.src = '../upload/spring.jpg';
            img.title = "春天"
        }
        summer.onclick = function() {
            img.src = '../upload/summer.jpg';
            img.title = '夏天'
        }
    </script>
</body>

</html>

image

根据不同的时间来显示不同的照片

image.png

思路如下

  • 根据系统时间来判断,所以需要内置日期对象
  • 利用多分支语句来判断并设置不同的照片
  • 需要一个图片,根据不同的时间段来修改图片的src路径
  • 需要一个div,根据不同的时间来修改内容
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            width: 400px;
            text-align: center;
        }
    </style>
</head>

<body>

    <img src="../upload/Morning.jpg" alt="">
    <div></div>

    <script>
        var img = document.querySelector('img');
        var div = document.querySelector('div');

        var date = new Date();
        var h = date.getHours();

        if (h < 12) {
            img.src = '../upload/Morning.jpg';
            div.innerHTML = "<strong>上午好</strong>"
        } else if (h < 18) {
            img.src = '../upload/Afternoon.jpg';
            div.innerHTML = "<strong>下午好</strong>"
        } else {
            img.src = '../upload/evening.jpg';
            div.innerHTML = "<strong>晚上好</strong>"
        }
    </script>
</body>

</html>

image.png

表单常用属性

image.png

注意事项

  • 表单的值不能通过innerHTML及innerText改变
  • 表单的值通过value改变
  • this是指当前事件函数的调用者
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>按钮</button>
    <input type="text" value="可用">

    <script>
        var bth = document.querySelector('button');
        var input = document.querySelector('input');
        bth.onclick = function() {
            input.value = "禁用";
            this.disabled = true
        }
    </script>
</body>

</html>

image

仿京东密码框

核心思路:点击眼睛按钮 将input的类型从密码框的类型转换为文本框类型

思路如下

  • 一个按钮有两个状态 点击一次切换为文本框类型 再点击一次切换为文本框类型
  • 可以利用flag变量,当flag为0的时候,点击切换为文本框,flag设置为1,当flag为1时,点击切换为密码框,flag设置为0
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .box {
            position: relative;
            width: 400px;
            margin: 200px auto;
            border-bottom: 1px solid black;
        }
        
        input {
            width: 380px;
            height: 30px;
            border: none;
            outline: none;
        }
        
        img {
            position: absolute;
            top: 2px;
            right: 2px;
            width: 20px;
        }
    </style>
</head>

<body>
    <div class="box">
        <lable>
            <img src="../upload/close.png" alt="" id="eyes">
        </lable>
        <input type="password" id="pwd">
    </div>

    <script>
        // 获取事件源
        var eyes = document.getElementById('eyes');
        var pwd = document.getElementById('pwd');
        // 绑定事件 注册事件源
        var flag = 0;
        eyes.onclick = function() {
            if (flag == 0) {
                pwd.type = "text";
                eyes.src = '../upload/close.png';
                flag = 1;
            } else {
                pwd.type = 'password'
                eyes.src = '../upload/open.png';
                flag = 0

            }
        }
    </script>
</body>

</html>

image

样式属性操作

element.style 行内样式操作
element.className 类名样式操作

注意
1.修改样式采用驼峰式命名法 如fontSize backgroundColor等等
2.js修改的样式 属于行内样式 占的权重比较高

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: pink;
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <div class="box"></div>
    <script>
        var div = document.querySelector('div');

        div.onclick = function() {
            this.style.backgroundColor = "yellow"
        }
    </script>
</body>

</html>

image

淘宝二维码案例

核心思路

  • 利用样式的显示与隐藏完成 display:none隐藏 dispaly:block显示
  • 点击按钮:就让二维码隐藏
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .box {
            position: relative;
            width: 400px;
            margin: 200px auto;
        }
        
        #bth {
            position: absolute;
            top: 0;
        }
    </style>
</head>

<body>
    <div class="box">
        <img src="../upload/二维码.png" alt="">
        <img src="../upload/关闭按钮.png" alt="" id="bth">
    </div>
    <script>
        var bth = document.querySelector('#bth');
        var box = document.querySelector('.box');

        bth.onclick = function() {
            box.style.display = "none"
        }
    </script>
</body>

</html>

image

淘宝精灵图

注意事项

  • 首先精灵图的图片的排列顺序要有规律可寻
  • 利用for循环 修改精灵图片的背景位置 background-position
  • for循环里面的索引i*44就是y坐标的位置

image.png

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        ul {
            width: 128px;
            margin: 200px auto;
            list-style: none;
        }
        
        li {
            float: left;
            width: 24px;
            height: 24px;
            background-color: pink;
            margin-right: 8px;
            margin-bottom: 4px;
            background: url(../upload/sprite.png) no-repeat;
        }
    </style>
</head>

<body>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <script>
        var lis = document.querySelectorAll('li');
        for (var i = 0; i < lis.length; i++) {
            var index = i * 44;
            lis[i].style.backgroundPosition = '0 -' + index + 'px';

        }
    </script>
</body>

</html>

image.png

显示与隐藏文本内容

思路如下
-首先需要两个事件 获得焦点事件onfocus与失去焦点事件onblur

  • 获得焦点事件时 判断表单里面是否有默认文字 如果有默认文字 则清空表单内容
  • 失去焦点事件时,判断表单内容是否为空,如果为空,则将表单内容修改为默认文字
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        input {
            color: #999;
        }
    </style>
</head>

<body>
    <input type="text" value="手机">
    <script>
        var text = document.querySelector('input');

        text.onfocus = function() {
            if (this.value === '手机') {
                this.value = ''
            }
            this.style.color = "#333"
        }

        text.onblur = function() {
            if (this.value === '') {
                this.value = '手机'
            }
            this.style.color = '#999'
        }
    </script>
</body>

</html>

image

使用className来实现样式属性操作

注意事项

  • 如果样式比较多,直接采用类名修改样式属性操作
  • class是个保留字,因此使用className来修改样式属性操作
  • className会直接更改元素的类名,会覆盖原先的类名。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .box {
            width: 200px;
            height: 200px;
            background-color: black;
            margin: 200px auto;
        }
        
        .box2 {
            width: 600px;
            height: 600px;
            background-color: chartreuse;
            margin: 200px auto;
        }
    </style>
</head>

<body>
    <div class="box"></div>
    <script>
        var div = document.querySelector('div');
        div.onclick = function() {
            this.className = 'box box2'

        }
    </script>
</body>

</html>

image

密码框格式提示错误信息

  • 首先判断的事件是表单失去焦点 onblur
  • 如果输入正确 则提示正确的信息并且提示图标为绿色
  • 如果输入的不是6到16位,则提示错误的信息并且字体图标显示为红色
  • 采用className来实现样式属性操作
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .register {
            width: 800px;
            margin: 200px auto;
        }
        
        .message {
            display: inline-block;
            font-size: 12px;
            color: #999999;
            background: url(../upload/mess.png) no-repeat left center;
            padding-left: 20px;
        }
        
        .wrong {
            background: url(../upload/wrong.png) no-repeat left center;
            color: red;
        }
        
        .right {
            background: url(../upload/right.png) no-repeat left center;
            color: green;
        }
    </style>
</head>

<body>
    <div class="register">
        <input type="password">
        <p class="message">请输入6~16位密码</p>
    </div>

    <script>
        var input = document.querySelector('input');
        var message = document.querySelector('p')
        input.onblur = function() {
            if (this.value.length < 6 || this.value.length > 16) {
                message.className = 'message wrong';
                message.innerHTML = '输入错误 请重新输入'
            } else {
                message.className = 'message right';
                message.innerHTML = '输入正确'
            }
        }
    </script>

</body>

</html>

image


已注销
54 声望3 粉丝

保持呼吸 坚持学习


下一篇 »
Web API(2)

引用和评论

0 条评论