Mar*_*ria 3 css css-position sticky vue.js vuejs2
Position: sticky大多数移动浏览器都不支持。但这position: fixed不是我需要的东西(因为固定块与文档底部的内容重叠)。
我猜对于jquery,如果我们到达文档滚动底部,将很容易为固定块设置静态位置。
但是对于Vue2,我不知道该怎么做。请给一些建议。也许存在更好的解决方案。
正如我在评论中提到的,我建议尽可能使用polyfill。他们将付出很多努力来确保正确。但是,这里简单介绍一下如何在Vue中进行操作。
我有应用程序通过将scrollY值放入数据项来处理滚动事件。我的sticky-top组件将计算其固定顶部位置,如果大于0,则使用该位置。小部件是position: relative。
new Vue({
el: '#app',
data: {
scrollY: null
},
mounted() {
window.addEventListener('scroll', (event) => {
this.scrollY = Math.round(window.scrollY);
});
},
components: {
stickyTop: {
template: '<div class="a-box" :style="myStyle"></div>',
props: ['top', 'scrollY'],
data() {
return {
myStyle: {},
originalTop: 0
}
},
mounted() {
this.originalTop = this.$el.getBoundingClientRect().top;
},
watch: {
scrollY(newValue) {
const rect = this.$el.getBoundingClientRect();
const newTop = this.scrollY + +this.top - this.originalTop;
if (newTop > 0) {
this.$set(this.myStyle, 'top', `${newTop}px`);
} else {
this.$delete(this.myStyle, 'top');
}
}
}
}
}
});Run Code Online (Sandbox Code Playgroud)
#app {
height: 1200px;
}
.spacer {
height: 80px;
}
.a-box {
display: inline-block;
height: 5rem;
width: 5rem;
border: 2px solid blue;
position: relative;
}Run Code Online (Sandbox Code Playgroud)
<script src="//unpkg.com/vue@latest/dist/vue.js"></script>
<div id="app">
<div class="spacer"></div>
<div class="a-box"></div>
<sticky-top top="20" :scroll-y="scrollY"></sticky-top>
<div class="a-box"></div>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7932 次 |
| 最近记录: |