javascript-web APIs
web APIs和JS的基础关联性

Web APIs
- 主要学习DOM和BOM
- js独有部分
- 页面交互效果
- js的应用
API:应用程序编程接口,给程序员提供的一种工具,以便轻松的实现想要完成的功能。
web API:是浏览器提供的一套操作浏览器功能和页面元素的AP I(BOM和DOM)
总结:
- API是为我们程序员提供一个接口,帮助实现某种功能
- web API主要是针对于浏览器提供的接口,主要针对浏览器做交互效果
- web API一般都有输入和输出(函数的传参和返回值),web API很多都是方法(函数)
DOM
文档对象模型,处理可扩展标记语言(html/xml)的标准编程接口。
通过这些DOM接口可以改变网页的内容和结构等
如何获取页面的元素
根据ID获取
<body>
<div id="time">
2019-9-9
</div>
<script>
//1.因为我们文档页面从上往下加载,所以先得有标签,所以script写到标签下面
//2.get获得element元素by通过驼峰法命名
//3.参数id是大小写敏感的字符串
//4.返回的是一个元素对象
var timer = document.getElementById('time');
console.log(timer);
//5.console.dir打印我们返回元素对象,更好的查查看里面的属性和方法
console.dir(timer);
</script>
</body>
根据标签名获取
<ul>
<li>知否知否,应是绿肥红瘦1</li>
<li>知否知否,应是绿肥红瘦2</li>
<li>知否知否,应是绿肥红瘦3</li>
<li>知否知否,应是绿肥红瘦4</li>
<li>知否知否,应是绿肥红瘦5</li>
</ul>
<ol id="ol">
<li>哈哈哈哈哈哈哈</li>
<li>哈哈哈哈哈哈哈</li>
<li>哈哈哈哈哈哈哈</li>
<li>哈哈哈哈哈哈哈</li>
<li>哈哈哈哈哈哈哈</li>
</ol>
<script>
//返回的是 获取过来元素对象的集合 以为数组的形式存储
var lis = document.getElementsByTagName('li');
console.log(lis);
console.log(lis[1]);
//可以循环遍历发音里面的元素,用for循环
//如果里面只有一个li,返回的还有一个伪数组的形式
//如果里面没有li,则返回的是一个空的伪数组
//element.getElementsByTagName('标签名');父元素一定是一个单独的元素
var ol = document.getElementById('ol');
console.log(ol.getElementsByTagName('li'));
</script>
根据类名来获得
<div class="box">盒子1</div>
<div class="box">盒子2</div>
<div id="nav">
<ul>
<li>首页</li>
<li>产品</li>
</ul>
</div>
<script>
//1.getElementsByClassName根据类名获得某些元素集合
var boxs = document.getElementsByClassName('box');
console.log(boxs);
//2.querySelector 返回制定选择器的第一个元素对象 选择器要加符号:类加. id加#
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()返回制定选择器所有元素的集合
var allbox = document.querySelectorAll('.box');
console.log(allbox);
获取body和html
<script>
//1.获取body元素
var bodyele = document.body;
console.log(bodyele);
//2.获取html元素
var htmlele = document.documentElement;
console.log(htmlele);
</script>
事件实行的步骤
- 获取事件源
- 注册事件(绑定事件)
- 添加事件处理程序
<div>123</div>
<script>
//执行事件步骤
//点击div控制台输出 我被选中了
//1.获取事件源
var div = document.querySelector('div');
//添加事件
//div.onclick
//添加处理程序
div.onclick = function () {
alert('我被选中了');
}
</script>
操作元素
改变元素的内容
<button>显示当前系统时间</button>
<div>TIME</div>
<p>123456</p>
<script>
//当我们点击按钮,div里面的文字会发生变化
//1.获取元素
var btn = document.querySelector('button');
var div = document.querySelector('div');
//2.注册事件
btn.onclick = function () {
div.innerText = getdate();
}
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>
<div></div>
<p>
我还是那要
<span>123</span>
</p>
<script>
//innerText和innerhtml的区别
//1.innerText 不识别html标签 去除空格 换行
var div = document.querySelector('div');
// div.innerText = '<strong>今天是:</strong>2022';
//2.innerHTML识别html标签 保留空格和换行
div.innerHTML = '<strong>今天是:</strong>2022';
//这两个属性是可读写的 可以获取元素里面的内容
var p = document.querySelector('p');
console.log(p.innerText);
console.log(p.innerHTML);
</script>
常用元素的属性操作
<button id="ldh">刘德华</button>
<button id="zxy">张学友</button>
<img src="images/ldh.jpg" alt="" title="刘德华">
<script>
//修改元素属性 src
//1.获取元素
var ldh = document.getElementById('ldh');
var zxy = document.getElementById('zxy');
var img = document.querySelector('img');
//2.注册事件
zxy.onclick = function () {
img.src = 'images/zxy.jpg';
img.title = '张学友';
}
ldh.onclick = function () {
img.src = 'images/ldh.jpg';
img.title = '刘德华';
}
</script>
//分时段输出不同文字和图片
<img src="images/morning.jpg" alt="">
<div>早上好</div>
<script>
//案例分析
// 根据系统不同时间来判断,所以需要用到日期内置对象
//利用分支语句来设置不同的图片
//需要一个图片,并且根据时间修改图片,就需要用到操作元素src属性
//需要一个div元素,显示不同的问候语,修改内容即可
//1.获取元素
var img = document.querySelector('img');
var div = document.querySelector('div');
//2.获得当前小时数
var date = new Date();
var h = date.getHours();
//3.判断小时数改变图片和文字信息
if (h < 12) {
img.src = 'images/morning.jpg';
div.innerHTML = '早上好,一年之际在于晨';
} else if (h < 18) {
img.src = 'images/afternoon.jpg';
div.innerHTML = '中午好,养好精神下午继续工作';
} else {
img.src = 'images/night.jpg';
div.innerHTML = '晚上好,早点睡哦';
}
</script>
表单元素的属性操作
<button>按一下</button>
<input type="text" value="输入内容">
<script>
//1.获取元素
var btn = document.querySelector('button');
var input = document.querySelector('input');
//2.注册事件处理程序
btn.onclick = function () {
//inpur.innerHTML=‘’这个是普通盒子 比如div标签里面的
//表单里面的值 文字内容用value来修改的
input.value = '我已经点过来';
//如果想要某个表单被禁用来不能再点击 disabled 我们想要按钮禁用
btn.disabled = true;
this.disabled=true;
//this指向事件函数的调用者 btn
}
</script>
仿京东登陆界面
- 核心思路:点击眼睛按钮,把密码框类型改为文本框就可以看见里面的密码
- 一个按钮两个状态,点击一次切换为文本框,继续点击一次跟换为密码框
- 算法:利用一个flag变量,来判断flag的值,如果是1就切换为文本框,flag设置为0,如果是0就切换为密码框,flag设置为1
<style> .box { position: relative; width: 300px; border-bottom: 1px solid #ccc; margin: 100px auto; } .box input { width: 370px; height: 30px; border: 0; outline: none; } .box img { position: absolute; top: 10px; right: 2px; width: 12px; } </style> <div class="box"> <label for=""> <img src="images/bi.jpg" alt="" id="eye"> </label> <input type="password" name="" id="pwd"> </div> <script> //1.获取元素 var eye = document.getElementById('eye'); var pwd = document.getElementById('pwd'); //2.注册事件 处理程序 var flag = 0; eye.onclick = function () { //点击一次,flag一定要变化 if (flag == 0) { pwd.type = 'text'; eye.src = 'images/zheng.jpg'; flag = 1; } else { pwd.type = 'password'; eye.src = 'images/bi.jpg'; flag = 0; } } </script>
样式属性修改操作
div { width: 100px; height: 100px; background-color: pink; } <div></div> <script> //1.获取元素 var div = document.querySelector('div'); //2.注册事件 处理 div.onclick = function () { this.style.backgroundColor = 'blue'; this.style.width = '400px'; } </script>
关闭淘宝二维码案例
- 核心思路:利用样式的显示和隐藏完成,display:none隐藏元素display:block显示元素。
- 点击按钮,就让这个二维码盒子隐藏起来即可
.box { position: relative; width: 74px; height: 88px; border: 1px solid #ccc; margin: 100px auto; font-size: 12px; text-align: center; color: #f40; display: block; } .box img { width: 60px; margin-top: 5px; } .close-btn { position: absolute; top: -1px; left: -16px; width: 14px; border: 1px solid #ccc; line-height: 14px; font-family: Arial, Helvetica, sans-serif; cursor: pointer; } <div class="box"> 淘宝二维码 <img src="images/tb.png" alt=""> <i class="close-btn">X</i> </div> <script> //1.获取元素 var btn = document.querySelector('.close-btn'); var box = document.querySelector('.box'); //2.注册事件 程序处理 btn.onclick = function () { box.style.display = 'none'; } </script>
className的使用
div { width: 100px; height: 100px; background-color: pink; } .change { width: 200px; height: 200px; background-color: blueviolet; } <div class="first"> 文本 </div> <script> var test = document.querySelector('div'); test.onclick = function () { //可以通过修改元素的className更改元素的样式 适用于样式较多的情况 // this.className = 'change'; //如果想要保留原先的类名,我么可以使用多类选择器 this.className = 'first change'; } </script>
注:
- 如果样式修改较多,可以采取操作类名方式更改元素样式
- class因为是个保留字,因此使用className来操作元素类名属性
- className会直接更改元素的类名,会覆盖原先的类名。
案例分析
- 首先判断的事件是表单丢失焦点onblur
- 如果输入正确则提示正确的信息颜色为绿色小图标变化
- 如果输入不是6到16位,则提示错误信息颜色为红色小图标变化
- 因为里面变化样式较多,我们采className修改样式
div { width: 600px; margin: 100px auto; } .message { display: inline-block; font-size: 12px; color: #999; background: url() no-repeat left center; padding-left: 20px; } .wrong { color: red; } .right { color: green; } <div class="register"> <input type="password" class="ipt" id=""> <p class="message">请输入6~16位密码</p> </div> <script> //1.获取元素 var ipt = document.querySelector('.ipt'); var message = document.querySelector('.message'); //2注册事件 失去焦点 ipt.onblur = function () { //根据表单里的值长度 if (this.value.length < 6 || this.value.length > 16) { message.className = 'message wrong'; message.innerHTML = '您输入的位数不对请输入6~16位数'; } else { message.className = 'message right'; message.innerHTML = '您输入正确'; } } </script>
总结


浙公网安备 33010602011771号