看问答里面很多人在求滚动到一定位置固定某个结构的方法,分享个简单的方法。
官方给的iscroll获取滚动条高度的在浏览器是有效的,在安卓手机上就无效了,获取transform transitionY同样的问题获取不到,所以放弃获取高度,直接通过固定目标元素距离顶部的距离去判断位置。
// 滚动固定
var headH = document.querySelector('header').offsetHeight, //头部高度
tab = document.getElementById('userTab'), //目标元素
fixed = document.getElementById('fixedNav'); // 浮动元素,默认隐藏,当然也可以直接浮动目标元素
window.addEventListener('scroll', function(e) {
//原理:滚动时判断固定元素的top距离头部的位置
if(himall.hasClass(fixed, 'hidden')) {
if(tab.getBoundingClientRect().top <= headH) {
himall.removeClass(fixed, ' hidden');
}
}else if(!himall.hasClass(fixed, 'hidden')){
if(tab.getBoundingClientRect().top >= headH){
fixed.className += ' hidden';
}
}
});
himall.removeClass = function(el,name) {
if(!el)
return;
if(el.className.indexOf(name)>=0)
el.className=el.className.replace(name,'');
}
himall.hasClass = function(el,name) {
return (el.className.indexOf(name)>=0);
}