一.Webapi 简介
1.0.学习目标
能够说出 Web APIs 阶段与 JavaScript 语法阶段的关联性
能够说出什么是 API
能够说出什么是 Web API
1.1.Web APIs 和 Js基础的关联性
1.1.1.js的组成
1.1.2.JS 基础阶段以及 Web APIs 阶段
JS 基础学习 ECMAScript 基础语法为后面作铺垫, Web APIs 是 JS 的应用,大量使用 JS 基础语法做交互效果
1.2. Web API介绍
1.2.1 API的概念
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,无需理解其内部工作机制细节,只需直接调用使用即可。
简单理解:API是给程序员提供的工具,以便能更轻松的实现想要完成的功能;
举例解释什么是API。
例如,
C语言中有一个函数 fopen()可以打开硬盘上的文件,这个函数对于我们来说,就是一个C语言提供的打开文件的工具。
javascript中有一个函数alert()可以在页面弹一个提示框,这个函数就是js提供的一个弹框工具。
这些工具(函数)由编程语言提供,内部的实现已经封装好了,我们只要学会灵活的使用这些工具即可。
1.2.2 Web API的概念
Web API 是浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM )。
现阶段我们主要针对于浏览器讲解常用的 API , 主要针对浏览器做交互效果。比如我们想要浏览器弹出一个警示框, 直接使用 alert(‘弹出’)
MDN 详细 API : https://developer.mozilla.org/zh-CN/docs/Web/API
因为 Web API 很多,所以我们将这个阶段称为 Web APIs。
此处的 Web API 特指浏览器提供的一系列API(很多函数或对象方法),即操作网页的一系列工具。例如:操作html标签、操作页面地址的方法。
API 和 Web API 总结
- API 是一些预先定义好函数,让开发人员直接使用, 无需关注内部实现。
- Web API 是 浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM ) 。
- Web API 一般都有输入和输出(函数的传参和返回值),Web API 很多都是方法(函数)
二.DOM
1.2.1 什么是DOM
文档对象模型(Document Object Model,简称DOM),是 W3C 组织推荐的处理可扩展标记语言(html或者xhtml)的标准编程接口。
W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式。
DOM是W3C组织制定的一套处理 html和xml文档的规范,所有的浏览器都遵循了这套标准。
1.2.2. DOM树
DOM树 又称为文档树模型,把文档映射成树形结构,通过节点对象对其处理,处理的结果可以加入到当前的页面。
- 文档:一个页面就是一个文档,DOM中使用document表示
- 标签节点:网页中的所有标签,通常称为元素节点,又简称为“元素”,使用element表示
- 节点:网页中的所有内容,在文档树中都是节点(标签、属性、文本、注释等),使用node表示
DOM把以上内容都看做是对象
1.3. 获取元素(重要!!)
场景:DOM在我们实际开发中主要用来操作元素。我们如何来获取页面中的元素呢?
常见页面中获取元素的方式如下:
- 根据 ID 获取
- 根据标签名获取
- 通过 HTML5 新增的方法获取
- 特殊元素获取
1.3.1. 根据ID获取
// 语法:document.getElementById(id) // 作用:根据ID获取元素对象 // 参数:id值,区分大小写的字符串 // 返回值:元素对象 或 null
案例代码
<body> <div id="time">2019-9-9</div> <script> // 因为我们文档页面从上往下加载,所以先得有标签 所以我们script写到标签的下面 var timer = document.getElementById('time'); console.log(timer); console.log(typeof timer); // object // console.dir 打印我们返回的元素对象 更好的查看里面的属性和方法 console.dir(timer); </script> </body>
1.3.2. 根据标签名获取某类元素
// 语法:document.getElementsByTagName('标签名') 或者 element.getElementsByTagName('标签名') // 作用:根据标签名获取元素对象 // 参数:标签名 // 返回值:元素对象集合(伪数组,数组元素是元素对象)
案例代码
<body> <ul> <li>知否知否,应是等你好久11</li> <li>知否知否,应是等你好久11</li> <li>知否知否,应是等你好久11</li> <li>知否知否,应是等你好久11</li> </ul> <ol id="ol"> <li>生僻字</li> <li>生僻字</li> <li>生僻字</li> <li>生僻字</li> </ol> <script> // 1.返回的是 获取过来元素对象的集合 以伪数组的形式存储的 var lis = document.getElementsByTagName('li'); console.log(lis); console.log(lis[0]); // 2. 我们想要依次打印里面的元素对象我们可以采取遍历的方式 for (var i = 0; i < lis.length; i++) { console.log(lis[i]); } // 3. 如果页面中只有一个li 返回的还是伪数组的形式 // 4. 如果页面中没有这个元素 返回的是空的伪数组的形式 // 5. element.getElementsByTagName('标签名'); 父元素必须是指定的单个元素 // var ol = document.getElementsByTagName('ol'); // [ol] // console.log(ol[0].getElementsByTagName('li')); var ol = document.getElementById('ol'); console.log(ol.getElementsByTagName('li')); </script> </body>
注意
- getElementsByTagName()获取到是动态集合,即:当页面增加了标签,这个集合中也就增加了元素。
- 得到的对象是个集合,要循环操作具体元素,需要遍历
1.3.3. H5新增获取元素方式
案例代码
<body> <div class="box">盒子1</div> <div class="box">盒子2</div> <div id="nav"> <ul> <li>首页</li> <li>产品</li> </ul> </div> <div id="test"> <ul> <li>首页test</li> <li>产品test</li> </ul> </div> <script> // 1. getElementsByClassName 根据类名获得某些元素集合 var boxs = document.getElementsByClassName("box") console.log(boxs); // 2. querySelector(css选择器) // 返回指定选择器的第一个元素对象 选择器 需要加符号 var firstBox = document.querySelector('.box') console.log(firstBox); var nav = document.querySelector('#nav') console.log(nav); var li = document.querySelector('li') console.log(li); // 3. querySelectorAll(css选择器) // 返回指定选择器的所有元素对象集合 var allBox = document.querySelectorAll('.box') console.log(allBox); var allli = document.querySelectorAll('li') console.log(allli); // 4.可以用 querySelectorAll 获取 test 下面的小li var testlis = document.querySelectorAll('#test li'); console.log(testlis); </script> </body>
1.3.4 获取特殊元素(body,html)
- 获取body元素 document.body
- 获取html元素 document.documentElement
// 1. 获取body元素 document.body var body = document.querySelector('body');// 可以获取 console.log(body); var bodyEle = document.body;// 可以获取 // 推荐这种 console.log(bodyEle); console.dir(bodyEle); // 2. 获取html元素 document.documentElement var html = document.querySelector('html');// 可以获取 console.log(html); var htmlEle = document.html; // 无法获取 console.log(htmlEle); // undefined var htmlEle = document.documentElement;// 可以获取 // 推荐这种 console.log(htmlEle);
1.4. 事件基础
1.4.1. 事件概述
JavaScript 使我们有能力去实现动态页面 ,而事件是可以被理解成 JavaScript 侦测到的行为。
简单理解: 触发— 响应机制。
网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,我们可以在用户点击某按钮时产生一个 事件,然后去执行某些操作。
1.4.2. 事件三要素
- 事件源(谁):触发事件的元素
- 事件类型(什么事件): 例如 click 点击事件
- 事件处理程序(做啥):事件触发后要执行的代码(函数形式),事件处理函数
案例代码
<body> <button id="btn">唐伯虎</button> <script> // 点击一个按钮,弹出对话框 // 1. 事件是有三部分组成 事件源 事件类型 事件处理程序 我们也称为事件三要素 //(1) 事件源 事件被触发的对象 谁 按钮 var btn = document.getElementById('btn'); //(2) 事件类型 如何触发 什么事件 比如鼠标点击(onclick) 还是鼠标经过 还是键盘按下 //(3) 事件处理程序 通过一个函数赋值的方式 完成 btn.onclick = function() { alert('点秋香'); } </script> </body>
1.4.3. 执行事件的步骤
案例代码
<body> <div>123</div> <script> // 执行事件步骤 // 点击div 控制台输出 我被选中了 // 1. 获取事件源 var div = document.querySelector('div'); // 2.绑定事件 注册事件 // div.onclick // 3.添加事件处理程序 div.onclick = function() { console.log('我被选中了'); } </script> </body>
1.4.4. 分析事件三要素
事件源:小箭头 事件类型:点击事件 事件处理程序:轮播图切换
1.4.4. 常见的鼠标事件
1.5. 操作元素
JavaScript的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容、属性等。(注意:这些操作都是通过元素对象的属性实现的)
1.5.1. 改变元素内容(获取或设置)
innerText和innerHTML的区别:
- 获取内容时的区别:
innerText会去除空格和换行,而innerHTML会保留空格和换行
- 设置内容时的区别:
innerText不会识别html,而innerHTML会识别
<body> <div>我是div</div> <p> 我是文字 <span>123</span> </p> <script> // 操作元素之修改元素内容 element.innerText / element.innerHTML // 用法 1.设置值 2.取值 (属性是可读写) var div = document.querySelector('div'); // div.innerText = '12312'; // 可以设置值 // div.innerText = '<h1>asdasda</h1>'; // 不识别html标签 非标准属性 // div.innerHTML = '12312'; // 可以设置值 div.innerHTML = '<h1>122</h1>'; // 识别html标签 W3C标准 var p = document.querySelector('p') console.log('p.innerHTML', p.innerHTML); // 获取标签内的所有内容 包括子标签,空格换行 console.log('p.innerText', p.innerText); // 获取标签内的所有文本内容 不包括 标签 空格换行 </script> </body>
案例–点击按钮显示当前时间
<body> <button> 显示当前系统时间 </button> <div> 某个时间 </div> <p>12312</p> <script> // 实现效果: 当我们点击了按钮div里面的内容显示成当前时间 // 1.获取元素 var btn = document.querySelector('button'); var div = document.querySelector('div'); // 2.注册事件 btn.onclick = function() { div.innerText = getDate() } // 3.加上对应的处理程序 function getDate () { var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; var dates = date.getDate(); var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']; var day = date.getDay(); return '今天是'+year+'年'+ month+'月'+ dates+'日'+ arr[day] } var p = document.querySelector('p'); p.innerText = getDate() </script> </body>