## 案例
```
<style>
* {
margin: 0;
padding: 0;
}
ul {
list-style-type: none;
}
.box {
width: 400px;
height: 300px;
border: 1px solid #ccc;
margin: 100px auto;
overflow: hidden;
}
.hd {
height: 45px;
}
.hd span {
display: inline-block;
width: 90px;
background-color: pink;
line-height: 45px;
text-align: center;
cursor: pointer;
}
.hd span.current {
background: purple;
}
.bd div {
height: 255px;
background-color: purple;
display: none;
}
.bd div.current {
display: block;
}
</style>
</head>
<body>
<div class="box">
<div id="hd" class="hd">
<span class="current">体育</span>
<span>娱乐</span>
<span>新闻</span>
<span>综合</span>
</div>
<div id="bd" class="bd">
<div class="current">我是体育板块</div>
<div>我是娱乐板块</div>
<div>我是新闻板块</div>
<div>我是综合板块</div>
</div>
</div>
<script>
function $(id) {
return document.getElementById(id);
}
var hd = $('hd');
var spans = hd.getElementsByTagName('span');
for (let i = 0; i < spans.length; i++) {
var span = spans[i];
//通过自定义属性,记录当前span的索引
span.setAttribute('index', i);
//注册事件
span.onmouseover = fn;
}
//function之所以写在这里,是为了优化和不让代码嵌套过多
//鼠标经过事件处理
function fn() {
//让所有span取消高亮
for (let i = 0; i < spans.length; i++) {
var span = spans[i];
span.className = '';
}
//当前的span高亮显示
this.className = 'current';
//tab栏对应的DIV显示,其他DIV隐藏
var bd = $('bd');
var divs = bd.getElementsByTagName('div');
for (let i = 0; i < divs.length; i++) {
var div = divs[i];
div.className = '';
}
//当前span对应的div显示,获取自定义属性的值
var index = parseInt(this.getAttribute('index'));
divs[index].className = 'current';
}
</script>
```
- 函数
- arguments
- 作用域
- 作用域链
- 预解析
- 对象
- 简单类型和复杂类型
- 内置对象
- Web API
- DOM
- 获取页面元素
- 注册事件及应用
- 点击切换图片
- 非表单元素的属性
- 取消a标签的默认行为
- 美女轮播图
- innerText和innerHTML
- 表单元素的属性
- 下拉框选中项
- 全选反选
- 自定义属性
- mouseenter和mouseover区别
- 样式操作及应用
- 操作样式
- 链式操作原理
- 显示隐藏二维码
- 高亮正在输入的文本框
- 隔行变色
- tab栏切换
- 常见dom操作
- 节点介绍及应用
- 模拟DOM
- 兄弟节点
- 获取子节点
- 菜单
- 父子节点
- 动态创建元素及应用
- 动态创建元素
- 动态创建列表
- 动态创建表格
- 动态创建元素性能对比
- 常用元素操作方法
- 事件详解
- 注册事件的几种方式
- addEventListener
- 移除事件
- 事件的三个阶段
- 事件委托
- 事件对象1
- 事件对象2
- 事件对象3
- 图片跟着鼠标移动
- 获取鼠标在盒子中的坐标
- 获取页面滚动的距离
- 取消默认行为的执行
- 阻止事件冒泡
- input只能输入数字
- BOM
- 概述
- 对话框
- JS加载详解
- setTimeout
- setInterval
- 简单动画
- location
- history
- UserAgent
- offset,client,scroll
- offset系列属性
- client系列属性
- scroll系列属性
- 拖拽案例
- 弹出登录窗口
- 动画函数封装
- 高级
- 浏览器的组成
- 面向对象
- 概述
- 面向对象开发过程
- 创建对象
- new的时候发生了什么
- 静态成员和实例成员
- 构造函数的原型
- 对象的原型
- 三者关系
- 原型链
- 属性查找规则
- 注意点
- 扩展内置对象
- 继承
- 原型继承
- call
- 借用构造函数
- 组合继承
- 函数进阶
- 函数声明和函数表达式
- 函数也是对象
- 函数调用方式和this指向
- call,bind,apply改变函数中的this
- AJAX
- 基础知识
- 原生AJAX
- 同步与异步
- JS异步原理
- Node
- 模块化
- 概述
- 模块成员导出详解
- ES6
- 解构赋值
- 字符串扩展
- 函数拓展
- 箭头函数
- 类与继承
- export default 和export
- Promise
- 回调函数
- 回调地狱
- promise基本概念
- Promosew实例只要被创建就立即执行里面的异步方法
- 使用then指定成功和失败的回调
- promise正确使用方式
- 捕获异常的两种方式
- NPM和NRM
- WebPack
- 概述
- plugin配置和使用
- loader配置和使用
- webpack和vue结合
- webpack中导入和script标签
- vue中结合render函数渲染指定组件到容器中
- 总结
- vue-router
- 跨域
- json
- jQuery
- 概述
- 注意
- dom对象和jquery对象互转
- 选择器
- 基础选择器
- 绑定事件
- 触发器
- 事件对象
- 事件冒泡
- 取消事件冒泡
- HTML5新增API
- 检测网络状态
- 全屏
- 文件读取
- 地理定位
- 百度地图名片
- 拖放
- 本地存储
- 应用缓存
- 多媒体播放器布局
