前端 —— JavaScript 基础篇 18 -- window.pageYOffset

本文介绍了如何使用JavaScript中的window.pageYOffset属性来实现仿淘宝首页侧边栏效果。当页面滚动时,通过监听事件并结合offsetTop和scrollTop判断元素位置,实现在header不可见时侧边栏固定在顶部的功能。内容适用于IE9及以上及现代浏览器。

最近想仿照淘宝首页的侧边栏,写个简单的小例子。获取滚动条距离顶部的距离 用到了window.pageYOffset 方法。

 window.pageYOffset 

返回文档当前沿垂直轴(即向上或向下)滚动的像素数,其值为0.0,表示该Document的顶部边缘当前与窗口内容区域的顶部边缘对齐。 pageYOffset是scrollY的一个别名是 window的只读属性

在IE9及以上、谷歌 、Safari、firefox,Opera(presto内核) 都支持 此语句

window.pageYOffset


那在IE低版本上怎么获取呢?

document.documentElement.scrollTop;

下面个实例吧:仿照淘宝侧边栏的效果

<div id="head-top">
	<ul>
		<li>登录</li>
		<li>注册</li>
	</ul>
</div>
<div id="content">
	<div id="header"></div>
    <div id="bodyer"></div>
	<div id="footer"></div>
</div>
<div class="slider-bar">
	<span class="goBack">回到顶部</span>
</div>
#header{
	width: 100%;
	height: 150px;
	background: #FFB6C1
}
#bodyer{
	width: 100%;
	height: 1200px;
	background: #BA55D3
}
#footer{
	width: 100%;
	height: 200px;
	background: #4682B4
}
.slider-bar{
	width: 40px;
	height: 150px;
	background: #800000;
	position: absolute;
	right: 50px;
	top: 500px;
}

#head-top{
	width: 100%;
	height: 40px;
	border-bottom: 2px solid #ccc;
	position: fixed;
	background: #FFF;
	display: none;
}
#head-top ul li{
	float: left;
	padding: 0 20px;
}
.goBack{
	display: none;
	margin: 110px 0 0 0;
	width: 40px;
	height: 40px;
	color: #fff;
	text-align: center;
	cursor: pointer;
}
var headTop = document.querySelector('#head-top');
var header = document.querySelector('#header');
var bodyer = document.querySelector('#bodyer');
var sliderBar = document.querySelector('.slider-bar');
var goBack = document.querySelector('.goBack');

//滚动到header看不见时 进行固定定位
var sliderBarTop = bodyerTop = bodyer.offsetTop;

//侧边栏顶部的距离 = sliderBar的距离 - bodyer距离顶部的距离时 出现:返回顶部
var sliderTop = sliderBar.offsetTop - bodyer.offsetTop;

document.addEventListener('scroll',function(){

	//当文档向上滚动的距离大于等于sliderBarTop(bodyer.offsetTop)时就固定位置
	if (window.pageYOffset >= bodyerTop) {
		sliderBar.style.position = 'fixed';
		sliderBar.style.top = sliderTop+ 'px';
		headTop.style.display = "block";
	}else{
		sliderBar.style.position = 'absolute';
		sliderBar.style.top = 500 + 'px';
        headTop.style.display = "none";
		goBack.style.display ="none";
	}

    window.pageYOffset >= sliderTop ? goBack.style.display ="block" : goBack.style.display ="none";
		
})

//点击回到顶部
goBack.onclick = function(){
	console.log(document.documentElement.scrollTop = document.body.scrollTop =0);
}

思路:

页面监听事件 document.addEventListener();
         当header看不见时:侧边栏固定在顶部不动,
        当header看不见 --就是 bodyer距离顶部的距离 为零时:顶部出现小窄条,同时侧边栏固定在顶部不动将sliderBar固定定位。

 

        offsetTop:当前元素顶端距离父元素顶端距离,鼠标滚轮不会影响其数值.
        scrollTop:当前元素顶端距离窗口顶端距离,鼠标滚轮会影响其数值.

 

我的文章都是学习过程中的总结,如果发现错误,欢迎留言指出,我及时更正。

### 关于 `window.pageYOffset` 的用法 `window.pageYOffset` 是用于获取当前页面垂直方向上滚动的距离的一个只读属性。它返回的是从页面顶部到视口顶部之间的像素距离[^1]。 以下是关于该属性的一些重要说明: - **兼容性**:在现代浏览器中,推荐使用 `pageYOffset` 来替代已废弃的 `document.documentElement.scrollTop` 或者 `document.body.scrollTop` 属性[^2]。 - **适用范围**:此属性适用于整个文档的高度超过可视区域的情况下的滚动计算。 下面是一个简单的代码示例展示如何使用 `window.pageYOffset`: ```javascript // 输出当前页面垂直滚动的位置 console.log('页面垂直滚动位置:', window.pageYOffset); // 定义一个函数,在每次滚动时打印滚动偏移量 function logScrollPosition() { console.log('当前滚动位置:', window.pageYOffset); } // 绑定滚动事件监听器 window.addEventListener('scroll', logScrollPosition); ``` 上述脚本会实时监控用户的滚动行为并记录下每一次滚动之后相对于顶部的位移值。 如果希望实现平滑回到顶部的功能,则可以结合 `scrollTo()` 方法一起使用如下所示: ```javascript // 平滑地将页面滚动至最顶端 window.scrollTo({ top: 0, behavior: 'smooth' }); ``` 这种做法不仅提升了用户体验还利用到了最新的 CSS 动画特性支持。 #### 注意事项 需要注意的一点是某些老旧版本IE可能不完全支持这些新标准APIs,因此开发过程中应当考虑跨平台兼容性的解决方案[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值