JS-WebAPI-DOM-1
Web API(1)
Web APIs 和JS基础的关联性
JS的组成:
ECMAScript
DOM
BOM
API和Web API
API
Application Programming Interface 应用成语编程接口
是一些预先定义的函数, 目的是提供应用程序与开发人员基于某软件或硬件得以访问一组列程的能力,而无需访问源代码, 或理解内部工作机制的细节
Web API
介绍:
是浏览器提供的一套操作浏览器功能和页面元素的API(DOM和BOM)
现阶段我们主要针对浏览器讲解常用的API, 做浏览器的交互效果
Web APIs:
Web API 一般都有输入和输出(函数的传参和返回值), Web API很多都是方法(函数).
DOM
DOM基础
DOM简介
是W3C组织推荐的处理可扩展标记语言(html或者xml)的标准编程接口
可以改变网页的内容,结构和样式
DOM树 文档
解释:
文档: 一个页面就是一个文档, DOM中使用document表示
元素: 页面中所有标签都是元素, DOM中使用element表示
节点: 网页中的所有内容都是节点(标签,属性,文本,注释等) 使用node表示
DOM把以上内容都看做是对象
获取元素
根据ID获取:getElementById()
使用getElementById()方法可以获取带有ID的元素对象
<div id="time">2019-9-9</div>
说明
//因为我们文档页面从上往下加载, 所以得先有标签
//驼峰命名法
//参数:大小写敏感的字符串 加引号
//返回的是一个对象
实例
var timer =document.getElementById('time') |
根据标签名获取:getElementsByTagName
获取文档中指定标签的所有这个标签元素
说明:
- 使用**getElementByTagName()**方法 可以返回带有指定标签的对象的集合
- 返回的是 获取元素对象的集合 以伪数组的形式存储的
实例
<ul> |
遍历—把拿到的所有li取出来
for(var i = 0; i<lis.length; i++) { |
注意
因为得到的是一个对象的集合, 所以我们想要操作里面的元素就需要遍历
得到的元素对象是动态的
如果页面中只有一个li 返回的还是为数组的形式
如哦页面中没有这个元素 返回的是一个空的伪数组 [ ] 长度为0
获取某个元素(父元素)内部所有指定标签名的子元素
element.getElementsByTagName(‘标签名’)
例如 获得ol下的li, 而不是ul下的li
问题:
// var ol = document.getElementsByTagName('ol'); // [ol] 这是一个伪数组 |
解决方法
// 将html中的ol标签增加id属性; |
(重点html5)根据类名:document.getElementsByClassName(‘类名’)
根据类名返回元素对象集合
var boxs = document.getElementsByClassName('box'); |
(重点html5)querySelector
返回指定选择器的第一个元素 切记 里面的选择器需要加符号 .box #nav
var firstBox = document.querySelector('.box'); |
(重点html5)querySelectorAll()
返回指定选择器的所有元素对象集合
var allBox = document.querySelectorAll('.box'); |
特殊元素获取
获取body元素
var bodyEle = document.body; |
获取html元素
var htmlEle = document.documentElement |
事件基础
概述
JS使我们能有能力创建动态页面, 而事件是可以被JS侦测到的行为
简单理解 :触发—-响应机制
事件三要素
事件源
事件被触发对象
var btn = document.getElementById(‘btn’);
事件类型
如何触发, 什么事件
比如鼠标点击(onclick), 还是鼠标经过 还是键盘按下
事件处理程序
格式: 被赋予元素的变量名.事件类型= function( ) { 要达到的效果 }
通过一个函数赋值的方式 完成
btn.onclick = function(){ |
实例
<body> |
事件执行的步骤
- 获取事件源
- 注册事件(绑定事件)
- 添加事件处理程序(采用函数赋值的方式)
实例
<body> |
利用事件来操作元素
改变元素的文本
element.innerText
<button>当前系统时间</button> |
//获取元素 |
刷新页面直接显示当前日期
var p = document.querySelector('p'); |
说明
从起始位置到终止位置的内容, 不识别我们写入的html标签 去除空格与换行
var div = document.querySelector('div') //非标准 |
element.innerHTML
起始位置到终止位置的全部内容, 包括html标签, 同时保留空格和换行
var p = document.querySelector('p'); |
这以上两个属性是可读写的 可以获取元素里面的内容
常用元素属性操作: 修改src, href
innerText, innerHTML改变元素内容
img.src=,
a.href=
案例: 点击更换图片
<body> |
案例:分时间显示不同图片, 显示不同问候语
要求:
根据不同时间,页面显示不同图片,同时显示不同的问候语。
如果上午时间打开页面,显示上午好,显示上午的图片。
如果下午时间打开页面,显示下午好,显示下午的图片。
如果晚上时间打开页面,显示晚上好,显示晚上的图片。
分析:
① 根据系统不同时间来判断,所以需要用到日期内置对象
② 利用多分支语句来设置不同的图片
③ 需要一个图片,并且根据时间修改图片,就需要用到操作元素src属性
④ 需要一个div元素,显示不同问候语,修改元素内容即可
实施:
<img src="images/s.gif" alt=""> |
element.id
element.alt
element.title
表单元素的操作
可以操作如下表单元素的属性:
type
value
checked
selected
disabled
element.disabled = true/false;
案例: 点击按钮禁用
<body> |
案例:仿京东显示隐藏密码明文案例(作废了 可以通过设置文本框的类型为password)
要求:
点击按钮 将密码切换为文本框, 并可以查看密码明文
分析
- 核心思路: 点击眼睛按钮, 把密码框类型改为文本框就可以看见里面的密码了.
- 一个按钮两个状态,点击一次,切换为文本框,继续点击一次切换为密码框
- 算法:利用一个flag变量,来判断flag的值,如果是1 就切换为文本框,flag 设置为0,如果是0 就切换为密码框,flag设置为1
style样式属性的操作
通过JS修改元素的大小, 颜色, 位置等样式.
如果样式较少或者功能较简单的情况下 则使用element.style
如果要一次修改大量样式, 则用element.className
element.style 网页行内操作
实现为行内样式的直接改动,权重很高, 可以立即生效
实例
<script> |
注意:
JS里面的样式采取驼峰命名大:fontSize, backgroundColor
JS修改style样式操作, 产生的是行内样式, css权重比较高
案例:仿淘宝关闭二维码案例
要求: 当鼠标点击二维码关闭按钮的时候,则关闭整个二维码。
分析:
核心思路:
利用样式的显示和隐藏完成, display=none 隐藏元素 display=block 显示元素
点击按钮,就让这个二维码盒子隐藏起来即可
实施:
<script> |
案例:循环精灵图背景
要求: 可以利用 for 循环设置一组元素的精灵图背景
分析:
① 首先精灵图图片排列有规律的
② 核心思路: 利用for循环 修改精灵图片的 背景位置 background-position
③ 剩下的就是考验你的数学功底了
④ 让循环里面的 i 索引号 * 44 就是每个图片的y坐标
<script> |
案例:显示隐藏文本框内容
要求: 当鼠标点击文本框时,里面的默认文字隐藏,当鼠标离开文本框时,里面的文字显示。
分析
① 首先表单需要2个新事件,获得焦点 onfocus 失去焦点 onblur
② 如果获得焦点, 判断表单里面内容是否为默认文字,如果是默认文字,就清空表单内容
③ 如果失去焦点, 判断表单内容是否为空,如果为空,则表单内容改为默认文字
实施:
<script> |
element.className 引用css中的类, 加入到html中
类名样式操作
在