1.复习
模块化
一、模块化开发
1.1 模块覆盖
如果一个模块文件中存在两个没有id的模块,前面的模块覆盖后面的模块
如果一个模块文件中存在两个不同id的模块,可以兼容,要通过require方法分别引入。
如果一个模块文件中存在两个相同id的模块,前面的模块覆盖后面的模块
define(['require', './dom'], function(require) {
require(['myId', 'myId2'], function(dom, dom2) {
console.log(dom, dom2);
});
})
1.2 接口定义
基于commonjs规范定义的接口,
? module.exports.接口
? 简写 exports.接口
? module.exports = 值类型
? module.exports = 对象
? module.exports = 函数
? 注意:当this指向exports的时候,还可以通过this暴露接口
基于module transports规范,由于它们不依赖于require, exports, module,开发起来更灵活
? return 值类型
? return 对象
return 函数
? 注意:当this指向exports的时候,还可以通过this暴露接口
1.3 模块信息对象
exports: 定义向外暴露的接口对象
id: 模块的id, 默认与uri不相同
uri: 模块的文件路径,相对于html引入的
如果没有data-main属性,会在路径的前面加上一个./
1.4 配置
requirejs也提供了config方法用于设置配置信息
? paths:用于简化文件的路径。值是一个对象
? key: 新的文件路径,
? value: 原始路径
? shim:用于将文件转为模块。
? key:模块的文件路径,
? value:是一个对象
? exports: 用于定义暴露接口的对象
? deps: 定义依赖集合
? map:配置模块的。
? key模块的文件路径,
? value:是一个对象
key: 引入的文件
? value: 修改的文件
? baseUrl:设置根目录,
? 优先级:baseUrl > data-main > html
require.config({
map: {
'modules/header': {
'jquery': '../lib/jquery50'
},
'modules/footer': {
'jquery': '../lib/jquery100'
}
},
shim: {
'../lib/jquery50': {
exports: '$',
},
'../lib/jquery100': {
exports: '$'
}
}
})
requirejs(['./modules/header/header', './modules/footer/footer']);
1.5 CSS 插件
在require中不能直接引入css文件要作为模块来引入
要进行配置
require.config({
? map: {
? ‘ *’: {
? css: 插件路径
? }
? }
})
在引入css文件模块的时候,要加上css!前缀
requirejs.config({
map: {
'*': {
css: 'lib/css.js'
}
}
})
requirejs(['./demo']);
二、HTML5
2.1 本地存储
HTML5是html的第五个版本,里面规定了一些废弃标签,同时新增了一些标签,和一些功能
存储:前端仓库的意思
? 每一个网站分配一个“仓库”,只要浏览器不卸载,电脑不崩溃,它将一直存在(生命周期永久)
本地存储对象:localStorage,里面是没有任何数据, 既然是一个对象
? 我们可以使用对象的点语法,去添加数据
? 注意:在存储之前先转为字符串,在读取的时候再转为原类型(JSON.stringify)
本地存储也提供了相应的API,所以建议我们使用原型中的方法
? 存储数据:localStorage.setItem(key, value)
? key: 表示要存储的数据名称, 是一个字符串
? value: 要存储的数据 (默认转为字符串)
? 读取数据:localStorage.getItem(key)
? key: 要读取的数据名称
? 删除某一项数据:localStorage.removeItem(key)
? key: 要删除的数据名称
? 删除全部数据:localStorage.clear()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
console.log(localStorage);
</script>
</body>
</html>
2.2 会话存储
除了本地存储之外还有一个存储对象叫做: sessionStorage
? 它与本地存储之间的区别就是生命周期的区别
? 本地存储的生命周期是永久的。
? 会话存储的生命周期是从页面打开到页面关闭。
? 与全局变量的区别是
? 会话存储可以刷新页面
? 全局变量不能刷新页面
? 生命周期长度:本地存储 > 会话存储 > 全局变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
</script>
</body>
</html>
2.3 webSQl
WebSql是前端数据库
openDatabase该方法用于打开或者是创建数据库
使用方式:openDatabase(dbname, version, descript, size)
? dbname: 数据库名称
? version: 版本号
? descript: 描述
? size: 大小
例如:var db = openDatabase(‘student’, 1, ‘这是一个数据库’, 1024 * 1024);
transaction:操作数据库
通过数据库对象可以调用原型中transaction,并且接受一个参数是回调函数,
? 函数中有一个参数:SQLTransaction
? 可以通过参数调用参数对象的原型方法:executeSql执行sql语句
? 使用方式:ta.executeSql(sql, [], successCallBack, failedCallBack)
? sql: 执行sql语句
? []: 替代数组
? successCallBack: 成功时候执行的回调函数
? failedCallBack: 失败时候执行的回调函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var db = window.openDatabase('class_46', 1.0, '这是46期的数据库', 1024 * 1024);
db.transaction(function(ta) {
ta.executeSql('select * from list', [],
function(ta, result) {
console.log('success', arguments);
for (var i = 0; i < result.rows.length; i++) {
console.log('姓名是:', result.rows[i].name);
console.log('年龄是:', result.rows[i].age);
}
},
function() {
console.log('fail');
})
})
</script>
</body>
</html>
二、HTML5
1.1 历史记录
history.forward
? 该方法用于加载历史记录列表中的下一个URL(显示下一个页面)
调用该方法等价于点击了前进按钮或者是调用了history.go(1)
history.back
? 该方法用于加载历史记录列表中的上一个URL(显示上一个页面)
? 调用该方法等价于点击了后进按钮或者是调用了history.go(-1)
pushState:该方法用于向历史记录中添加新的历史记录。(注:状态改变不需要刷新页面)
? 使用方式:history.pushState(obj, title, url)
? obj: 添加的数据 是一个对象
? title: 新的网页标题 一般省略
? url: 新的网页的url
replaceState:该方法用于替换当前的历史记录
? 使用方式:history.pushState(obj, title, url)
? obj: 添加的数据 是一个对象
? title: 新的网页标题 一般省略
? url: 新的网页的url
window.onpopstate事件:该事件可以监听replaceState方法的执行以及页面的切换。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<a href="./thrid.html">thrid.html</a>
<button>后退</button>
<button>添加第一个状态</button>
<button>添加第二个状态</button>
<button>添加第三个状态</button>
<button>替换当前状态</button>
<script>
var btn = document.getElementsByTagName('button');
btn[0].onclick = function() {
history.go(-1);
}
btn[1].onclick = function() {
history.pushState({ page: 1 }, null, '#page-1');
}
btn[2].onclick = function() {
history.pushState({ page: 2 }, null, '#page-2');
}
btn[3].onclick = function() {
history.pushState({ page: 3 }, null, '#page-3');
}
btn[4].onclick = function() {
history.replaceState({ page: 4 }, null, '#page-4');
}
window.onpopstate = function(e) {
console.log('传递过来的数据:', e.state);
}
</script>
</body>
</html>
|