def trackChanges(newRecord:Object,oldRecord:Object) :String = {
val fields :Array[Field] = newRecord.getClass.getDeclaredFields
var check : String = "Equal"
for( i <- 0 to fields.length-1)
{
fields(i).setAccessible(true)
val fieldType:Object= fields(i).getType
fieldType match
{
case x: String=> fields(i).get(newRecord).equals(fields(i).get(oldRecord))
case x: java.lang.Double => println("String")
case x: Seq[_] => println("String")
case x: List[_] =>
}
并非大多数移动浏览器都支持。但Position: sticky
不是我需要的东西(因为固定块重叠了文档底部的内容)。
我猜对于jquery,如果我们得到文档onscroll的底部,那么为固定块设置静态位置会很容易。
但对于Vue2,我还没有想过如何做同样的事情。请给我一些建议。或者可能存在更好的解决方案。
答案 0 :(得分:3)
正如我在评论中所提到的,如果可能的话,我建议使用polyfill。他们会付出很多努力来做到正确。但是,这里有一个简单的介绍如何在Vue中完成它。
我通过将scrollY值放入数据项来让应用程序处理滚动事件。我的sticky-top
组件计算其固定顶部位置的内容,以及它是否&gt; 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');
}
}
}
}
}
});
&#13;
#app {
height: 1200px;
}
.spacer {
height: 80px;
}
.a-box {
display: inline-block;
height: 5rem;
width: 5rem;
border: 2px solid blue;
position: relative;
}
&#13;
<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>
&#13;
答案 1 :(得分:0)
这似乎对我有用
...
<header
ref="header"
class="header-container"
:class="{ 'header-container--sticky': isHeaderSticky }"
>
...
...
data() {
return{
scrollY: null,
headerTop: 0,
isHeaderSticky: false,
}
},
mounted() {
window.addEventListener('load', () => {
window.addEventListener('scroll', () => {
this.scrollY = Math.round(window.scrollY);
});
this.headerTop = this.$refs.header.getBoundingClientRect().top;
});
},
watch: {
scrollY(newValue) {
if (newValue > this.headerTop) {
this.isHeaderSticky = true;
} else {
this.isHeaderSticky = false;
}
}
}
...
...
.header-container {
&--sticky {
position: sticky;
top: 0;
z-index: 9999;
}
}
...