1.window对象
是js中的顶级对象, 所有的全局方法和属性都是window对象的成员
1. window对象有一个特殊的属性叫做top,是无法修改的 指向window本身 (变量名不能用top)
2. 只要是window对象的成员,使用时一律可以省略window
3. 声明变量最好不要跟dom里面的属性一致.例如 top ,left 一般使用驼峰命名
boxTop , oneTop
console.log(window)
console.log(window.document === document)
2.window对象两个方法
1. 打开窗口 window.open()
2. 关闭窗口 window.close()
打开窗口 window.open()
document.querySelector('.btn1').onclick = function () {
//第一个参数是url: 网址
//第二个参数是target :新窗口 _blank(默认) _self :当前页面打开
//第三个参数 新窗口尺寸:可以实现窗中窗功能
//第四个参数 可选参数replace : 是否替换历史记录 true:替换 false:不替换
window.open('http://www.baidu.com', '_blank', 'left=300,top=300,width=300,height=300')
}
关闭窗口 window.close()
<input type="button" value="点我打开一个新窗口" id="open">
<input type="button" value="点我有惊喜" id="close">
document.getElementById('close').onclick = function ( ) {
//参数就是你想要关闭的窗口对象,如果不写,默认就是关闭自己
//1.这样写如果关闭的是顶级窗口谷歌和火狐会失效,如果失效可以使用下面这种写法
//window.close( );
/*2.谷歌火狐为了安全起见会拦截我们的代码,js代码只能关闭用js代码打开的界面,
所以我们用js先假装在当前窗口打开自己,然后再关闭自己*/
//这里的url不是空字符串"",而是一个空格字符串 " "
window.open(" ","_self").close();
}
3.window对象事件
事件
1. window.onload = function(){}
* 加载事件 : 页面DOM树 + 外部资源 加载完毕后执行
2. window.onbeforeunload = function(){}
* 关闭事件: 页面关闭之前执行(存储数据)
window.onload:页面加载事件
onload:页面DOM树 + 外部资源
window.onload = function () {
console.log('页面加载完毕');
let box = document.querySelector('.box')
console.log(box)
console.log(box.scrollWidth, box.scrollHeight);
}
window.onbeforeunload = function () {
console.log('页面关闭之前');
}
4. location对象
location对象 : 浏览器地址栏 url
1.重点掌握: location.href = 'url'
2.三个方法
location.assign('url') :
location.replace('url') :
location.reload('url') :
重点:修改location对象的href,可以实现网页跳转
a标签的href用于无条件渲染.没有逻辑性,点我100%跳转
location.href:用于js具有逻辑性跳转.例如:登录.(只有成功才会跳转)
window.location.href = 'http://www.baidu.com'
案例
<button class="assign">assign跳转</button>
<button class="replace">replace替换</button>
<button class="reload">reload刷新</button>
console.log(location);
assign跳转
document.querySelector('.assign').onclick = function () {
location.assign('http://www.baidu.com')
}
replace替换
document.querySelector('.replace').onclick = function () {
location.replace('http://www.baidu.com')
}
reload刷新
document.querySelector('.reload').onclick = function () {
location.reload()
}
5.history对象
history对象 : 历史记录
history.back() : 返回上一页
history.forward() : 前进下一页
history.go(数字) :跳转历史记录
history.go(0)跳转自已,相当刷新
history.go(-1)负数:回退: -1回退1页,-2回退2页
history.go(1) 正数:前进 1前进1页,2前进2页
console.log(window.history)



6.navigator对象
navigator对象 : 用户信息
用途:收集用户信息
console.log(navigator)
console.log(navigator.userAgent)
console.log ( navigator.appVersion );
onsole.log ( navigator.platform );
使用场景1:判断当前用户的操作系统是32位还是64位
谷歌和IE 64位显示WOW64 火狐显示Win64
if(navigator.userAgent.indexOf('WOW64') != -1 || navigator.userAgent.indexOf('Win64') != -1){
console.log ( "64位" );
}else{
console.log ( "32位" );
}
7.localstorage
1.localStorage : 本地存储
经典应用:免登录
2.语法 :
存数据 : localStorage.setItem('属性名','属性值')
取数据 : localStorage.getItem('属性名')
删数据 : localStorage.removeItem('属性名')
清空数据 : localStorage.clear()
3.注意点 :
3.1 localStorage是永久存储的,数据存入硬盘中,除非手动删除,否则一直存在
3.2 只能存储字符串,如果是其它类型,则编译器会自动帮你转成字符串后存储
localStorage 如何存储对象类型:使用JSON
存数据 : localStorage.setItem('属性名','属性值')
document.querySelector('.setItem').onclick = function () {
localStorage.setItem('username', 'admin')
localStorage.setItem('password', '123456')
localStorage.setItem('nickname', '789')
localStorage.setItem('age', 30)
}

取数据 : localStorage.getItem('属性名')
document.querySelector('.getItem').onclick = function () {
let username = localStorage.getItem('username')
console.log(username);
}

删数据 : localStorage.removeItem('属性名')
document.querySelector('.removeItem').onclick = function () {
localStorage.removeItem('age')
}

清空数据 :localStorage.clear() 一次性删除所有数据
document.querySelector('.clear').onclick = function () {
localStorage.clear()
}

8.sessionStorage
1.sessionStorage : 会话存储
* 经典场景: 页面间传值
2.语法 :
存数据 : sessionStorage.setItem('属性名','属性值')
取数据 : sessionStorage.getItem('属性名')
删数据 : sessionStorage.removeItem('属性名')
清空数据 : sessionStorage.clear()
3.注意点 :
3.1 sessionStorage是临时存储的,只要页面一关闭,数据就会自动清空
3.2 只能存储字符串,如果是其它类型,则编译器会自动帮你转成字符串后存储
localStorage与sessionStorage区别(异同点)
相同点:作用一致,都是存储数据
不同点: 存储方式不同
localStorage:存储硬盘
sessionStorage:存储内存
案例
<button class="setItem">存数据</button>
<button class="getItem">取数据</button>
<button class="removeItem">删除数据</button>
<button class="clear">清空数据</button>
存数据 : sessionStorage.setItem('属性名','属性值')
document.querySelector('.setItem').onclick = function () {
sessionStorage.setItem('username', 'admin')
sessionStorage.setItem('password', '123456')
sessionStorage.setItem('nickname', '789')
sessionStorage.setItem('age', 30)
}
取数据 : sessionStorage.getItem('属性名')
document.querySelector('.getItem').onclick = function () {
let username = sessionStorage.getItem('username')
console.log(username);
}
删数据 : sessionStorage.removeItem('属性名')
document.querySelector('.removeItem').onclick = function () {
sessionStorage.removeItem('age')
}
清空数据 : sessionStorage.clear() 一次性删除所有数据
document.querySelector('.clear').onclick = function () {
sessionStorage.clear()
}
9. 页面间传值 两个页面之间传值
页面A
<body>
<input type="text" placeholder="请输入用户名" class="username">
<input type="text" placeholder="请输入密码" class="password">
<button class="btn">下一页</button>
<script>
document.querySelector('.btn').onclick = function () {
let username = document.querySelector('.username')
let password = document.querySelector('.password')
sessionStorage.setItem('username', username.value)
sessionStorage.setItem('password', password.value)
location.href = './04-页面传值B.html'
}
页面B
<body>
<input type="text" placeholder="请输入手机号" class="phone">
<input type="text" placeholder="请输入收获地址" class="address">
<button class="btn">注册</button>
<script>
document.querySelector('.btn').onclick = function () {
let username = sessionStorage.getItem('username')
let password = sessionStorage.getItem('password')
let phone = document.querySelector('.phone')
let address = document.querySelector('.address')
console.log(username, password, phone.value, address, value);
}
</script>

10.JSON格式
1.JSON是什么: 是一种数据格式,本质字符串
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
2.JSON作用 : 解决数据 跨平台数据传输
在实际开发中,我们前端要经常与服务器(后端)进行数据交互。而前端与后端编程语言不同。
前端: js , 后端: java、c++ 、 php 、 python 、 .net 、 c# 、 go 等等
不同的编程语言数据类型不一致。无法互通的 。
为了可以让不同的编程语言之间可以进行数据交互,
后来人们发明了一种所有编程语言都通用的格式 : 叫做 JSON 。
3.JSON语法 :
3.1 js→json(前端发给后台) let json = JSON.stringify(js对象)
3.2 json→js(后台发给前端) let js = JSON.parse(json字符串)
js对象
let jsObj = {
name: '张三',
age: 20,
hobby: ['上课', '学习', '睡觉']
}
json字符串
let jsonStr = '{"name":"张三","age":"20","hobby":["上课", "学习", "睡觉"]}'
js→json(前端发给后台) let json = JSON.stringify(js对象)
let json = JSON.stringify(jsObj)
console.log(json)
json→js(后台发给前端) let js = JSON.parse(json字符串)
let js = JSON.parse(jsonStr)
console.log(js)

11.JSON与js互转
4.1 json转js : JSON.parse(json对象)
4.2 js转json : JSON.stringify(js对象)
案例
<button class="btn1">点我存储</button>
<button class="btn2">点我读取</button>
<script>
let json = '{"name":"admin","password":"123456"}'
console.log(JSON.parse(json))
let js = {
name: 'admin',
password: 123456
}
console.log(JSON.stringify(js))
document.querySelector('.btn1').onclick = function () {
localStorage.setItem('user', JSON.stringify(js))
}
document.querySelector('.btn2').onclick = function () {
let json = localStorage.getItem('user')
let js = JSON.parse(json)
console.log(js)
}

<body>
<button class="btn1">存对象</button>
<button class="btn2">取对象</button>
<script>
let obj = {
name:'ikun',
age:30,
sex:'男'
}
document.querySelector('.btn1').onclick = function(){
localStorage.setItem('user', JSON.stringify(obj) )
}
document.querySelector('.btn2').onclick = function(){
let js = JSON.parse( localStorage.getItem('user') )
console.log( js )
}


12.offset,scroll,client获取尺寸与位置
<style>
* {
margin: 0;
padding: 0;
}
div {
width: 150px;
height: 150px;
background-color: pink;
overflow: auto;
padding: 10px;
border: 10px solid red;
margin: 100px;
}
</style>
</head>
<body>
<div class="box">
我有很多很多的内容哦 我有很多很多的内容哦 我有很多很多的内容哦
我有很多很多的内容哦 我有很多很多的内容哦 我有很多很多的内容哦
我有很多很多的内容哦 我有很多很多的内容哦 我有很多很多的内容哦
我有很多很多的内容哦 我有很多很多的内容哦 我有很多很多的内容哦
我有很多很多的内容哦 我有很多很多的内容哦 我有很多很多的内容哦
我有很多很多的内容哦 我有很多很多的内容哦 我有很多很多的内容哦
</div>
<script>
let box = document.querySelector('.box')
console.log(box.offsetWidth, box.offsetHeight)
console.log( box.offsetLeft,box.offsetTop )
console.log(box.scrollWidth, box.scrollHeight)
console.log( box.scrollLeft,box.scrollTop )
console.log(box.clientWidth, box.clientHeight)
console.log( box.clientLeft,box.clientTop )

13.如何获取页面html的滚动距离
1.页面滚动事件: window.onscroll
2.页面滚动距离:html→ document.documentElement.scrollTop
*/
window.onscroll = function () {
console.log('滚动条移动')
console.log(document.documentElement.scrollLeft, document.documentElement.scrollTop)
}

14.固定顶部导航
<style>
* {
margin: 0;
padding: 0
}
img {
vertical-align: top;
}
.main {
margin: 0 auto;
width: 1000px;
margin-top: 10px;
}
.fixed {
position: fixed;
top: 0;
left: 0;
}
</style>
</head>
<body>
<div class="top" id="topPart">
<img id="pic" src=" ">
</div>
<div class="nav" id="navBar">
<img src=" ">
</div>
<div class="main" id="mainPart">
<img src=" ">
</div>
<script>
let topPart = document.querySelector('.top')
let nav = document.querySelector('.nav')
let main = document.querySelector('.main')
window.onscroll = function(){
let h = document.documentElement.scrollTop
if( h >= topPart.offsetHeight ){
nav.style.position = 'fixed'
nav.style.top = '0px'
main.style.marginTop = 10 + nav.offsetHeight + 'px'
}else{
nav.style.position = 'static'
main.style.marginTop = '10px'
}
}

15.client响应式布局
<script>
window.onresize = function(){
let w = document.documentElement.clientWidth
let h = document.documentElement.clientHeight
console.log(w,h)
if( w >= 1200 ){
document.body.style.backgroundColor = 'red'
}else if( w >= 992 ){
document.body.style.backgroundColor = 'orange'
}else if( w >= 768 ){
document.body.style.backgroundColor = 'yellow'
}else{
document.body.style.backgroundColor = 'green'
}
if( w>h ){
document.body.style.backgroundColor = 'cyan'
}else{
document.body.style.backgroundColor = 'purple'
}
}
