前端之家收集整理的这篇文章主要介绍了
JS解决position:sticky的兼容性问题的方法,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在项目中有用到sticky的布局,可是由于兼容性问题,在安卓端没有很好的兼容,所以为了彻底解决这个问题只能写一个组件来解决这个麻烦的问题,这里为什么是组件而不是指令是因为,是有原因的,下面会讲到。
position:sticky的兼容性以及作用
Caniuse上显示sticky的兼容性如下:
Sticky的作用相当于relative和fixed的结合体,当修饰的目标节点再屏幕中时表现为relative,当要超出的时候是fixed的形式展现,因为这个特性,我们就可以来实现一个sticky的模拟效果。
sticky组件实现
template部分
{
if (el.getBoundingClientRect().top <= top) {
elWarp.style.position = 'fixed';
}
if (el.getBoundingClientRect().top >= 0 && elWarp.style.position != 'absolute') {
elWarp.style.position = 'absolute';
}
})
},cssSupport: function (attr,value) {
var element = document.createElement('div');
if (attr in element.style) {
element.style[attr] = value;
return element.style[attr] === value;
} else {
return false;
}
},getNumberValue(pxValue){
var value = String(pxValue).match(/^\-?\+?[0-9]+/g);
return value ? Number(value) : undefined;
},addScrollListen(target,cb){
target.addEventListener('y-scroll',(event)=> {
cb && cb(event);
});
}
},}