副队长JavaScript教程(63)-BOM之窗口大小与页面滚动
点此查看所有教程、项目、源码导航
文章目录
- 1. 背景
- 2. 获取浏览器窗口可视区域大小
- 2.1 innerWidth、innerHeight
- 2.2 outerWidth、outerHeight(了解)
- 3. 窗口缩放事件 resize
- 4. 获取页面滚动距离 scrollX、scrollY
- 5. 控制页面滚动的方法
- 5.1 scrollTo (x, y) 滚动到固定坐标
- 5.2 scrollBy (x, y) 相对当前位置滚动
- 6. 滚动事件 scroll
- 7. 实战案例:回到顶部按钮
- 8. 小结
1. 背景
前面我们学习了定时器,这一节继续学习 window 下和窗口、滚动相关的能力。
我们平时开发网页,经常会遇到这些需求:获取浏览器可视区域大小、监听窗口缩放、拿到页面滚动距离、代码控制页面滚动(比如回到顶部),这些都属于 BOM 的能力。
说明:这些属性和方法都属于 window 对象,书写时 window 可以省略。
2. 获取浏览器窗口可视区域大小
可视区域,就是我们当前能看到网页内容的这块区域,也叫视口。
2.1 innerWidth、innerHeight
// 可视区域宽度(包含滚动条)console.log(window.innerWidth);// 可视区域高度(包含滚动条)console.log(window.innerHeight);特点:只读属性,只能读取,不能修改。浏览器窗口缩放的时候,这两个值会跟着变化。
2.2 outerWidth、outerHeight(了解)
console.log(window.outerWidth);console.log(window.outerHeight);outer 获取的是整个浏览器窗口的大小,包含浏览器标题栏、边框,一般开发很少用。
入门重点区分:inner 是网页内容可视区;outer 是整个浏览器窗口。
3. 窗口缩放事件 resize
当用户拖动浏览器边框,改变窗口大小的时候,会触发 resize 事件。
我们可以绑定这个事件,在窗口变化时做一些逻辑。
window.onresize=function(){console.log("窗口宽度:",innerWidth);console.log("窗口高度:",innerHeight);}注意:窗口缩放过程中,这个事件会频繁触发,不要在里面写太重、很耗性能的代码。
4. 获取页面滚动距离 scrollX、scrollY
当页面内容很长,出现滚动条之后,我们可以拿到页面已经滚动出去的距离。
// 水平滚动距离(左右滚)console.log(window.scrollX);// 垂直滚动距离(上下滚,最常用)console.log(window.scrollY);- 页面在最顶部,没有滚动:scrollY = 0
- 往下滚动多少像素,scrollY 的数值就是多少
- 只读属性,只能读取,不能直接赋值修改滚动位置
5. 控制页面滚动的方法
5.1 scrollTo (x, y) 滚动到固定坐标
作用:滚动到页面绝对位置,x 是水平位置,y 是垂直位置。
// 滚动到页面最顶部window.scrollTo(0,0);// 垂直滚动到距离顶部 500px 的位置window.scrollTo(0,500);5.2 scrollBy (x, y) 相对当前位置滚动
作用:在当前滚动位置的基础上,再滚动一段距离,是相对偏移。
正数代表向右、向下;负数代表向左、向上。
// 在当前位置,向下滚动 100pxwindow.scrollBy(0,100);// 在当前位置,向上滚动 100pxwindow.scrollBy(0,-100);简单区分:scrollTo 是 “去哪”;scrollBy 是 “再走多少”。
6. 滚动事件 scroll
页面滚动的时候,会持续触发 scroll 事件。
很多网页的导航栏滚动吸顶、滚动时显示回到顶部按钮,都是靠这个事件实现。
window.onscroll=function(){console.log("当前垂直滚动距离:",scrollY);}7. 实战案例:回到顶部按钮
需求:页面很长,滚动超过 300 像素之后,显示 “回到顶部” 按钮;点击按钮,页面滚动回顶部。
<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><title>回到顶部</title><style>body{height:1500px;}#topBtn{position:fixed;bottom:50px;right:30px;display:none;}</style></head><body><buttonid="topBtn">回到顶部</button><script>varbtn=document.getElementById("topBtn");// 滚动事件window.onscroll=function(){if(scrollY>300){btn.style.display="block";}else{btn.style.display="none";}}// 点击回到顶部btn.onclick=function(){scrollTo(0,0);}</script></body></html>效果:
案例讲解:
- 给 body 设置很高高度,让页面出现滚动条;
- 滚动事件里面判断 scrollY,大于 300 就显示按钮,否则隐藏;
- 点击按钮,调用 scrollTo (0,0),直接滚动到页面顶部。
8. 小结
- innerWidth /innerHeight:获取网页可视区域大小;outer 是整个浏览器窗口大小。
- onresize:窗口大小改变触发的事件。
- scrollX /scrollY:读取页面已经滚动的距离,只读。
- scrollTo (x,y):滚动到指定坐标;scrollBy (x,y):基于当前位置滚动一段距离。
- onscroll:页面滚动时持续触发。
- 这些都是 window 的 BOM 能力,经常用来做回到顶部、滚动吸顶、适配窗口大小等网页效果。