全部。我试图做粘性条,但是有问题:
HTML:
<template> <div class="navigators" :class="{ navBarFixed: isFixed }" ref="navigators"> html content </div> </template>
CSS:
.navBarFixed {
position: fixed;
top: 655px;
}
脚本:
data() {
return {
isFixed: false
};
},
methods: {
fixNavBar: function(e) {
let navBar = this.$refs.navigators;
let navBaroffsetTop = navBar.offsetTop;
let documentScrollTop = document.body.scrollTop;
console.log(1);
console.log(documentScrollTop);
if (
documentScrollTop >= navBaroffsetTop ||
document.documentElement.scrollTop >= navBaroffsetTop
) {
this.isFixed = true;
}
}
}
mounted: function() {
window.onscroll = this.fixNavBar()
}
window.onload()
放入mounted
生命周期的原因是,我将其放入功能fixNavBar()
,但它仅以作弊方式起作用,并且当页面重新加载时它停止工作,我想这是因为当我在已安装的生命周期中调用函数fixNavBar()
时,它只执行了一次。同时,它仍然具有[
navBaroffsetTop
始终打印为0
还有错误
无法读取未定义的属性
.offsetTop
在控制台中。
在这种情况下,代码如下:
fixNavBar: function (e) {
let navBar = this.$refs.navigators;
let navBaroffsetTop = navBar.offsetTop;
let documentScrollTop = document.body.scrollTop;
window.onscroll = function () {
console.log(1);
console.log(documentScrollTop);
if (
documentScrollTop >= navBaroffsetTop ||
document.documentElement.scrollTop >= navBaroffsetTop
) {
this.isFixed = true;
}
};
}
mounted: function() {this.fixNavBar();}
该函数将立即执行,因为您正在使用();对其进行调用]
只需您的代码即可:
window.onscroll = this.fixNavBar;