[英]Add/remove class on scroll in VueJs
我正在嘗試在滾動時向標題添加一個類並將其刪除。 但是失敗。 每次滾動時都會添加該類。 因此,如果 ScrollY === 100,則該元素已添加類 100 次。 如何使它只添加一次,並在 scrollY < 100 時將其刪除?
我究竟做錯了什么?
<div id="app">
<v-app>
<v-content>
<v-container fluid fill-height class="priceContainer">
<v-layout row wrap align-center justify-center>
<v-flex xs12 sm12 text-center>
<v-toolbar
:clipped-left="$vuetify.breakpoint.lgAndUp"
class="elevation-0 "
fixed
temporary
@scroll="handleSCroll"
>
<v-toolbar-side-icon @click.stop="drawer = !drawer" ></v-toolbar-side-icon>
<v-toolbar-title style="width: 300px" class="ml-0 pl-3">
<span class="PriceLogoTitle hidden-sm-and-up">ELS</span>
<span class="PriceLogoTitle hidden-sm-and-down">ELS</span>
</v-toolbar-title>
<v-spacer></v-spacer>
<!-- кнопка входа -->
<v-btn class="navBtnEnter" flat>Enter <v-icon right >account_box</v-icon></v-btn>
<!-- кнопка входа конец -->
</v-toolbar>
</v-flex>
<!-- -->
</v-layout>
</v-container>
</v-content>
</v-app>
</div>
.priceContainer{
background-image: radial-gradient( rgb(3, 237, 245),rgb(0, 126, 131));
height: 1000px;
}
.theme--light.v-toolbar--bgchange {
background-color: #009D95;
}
new Vue({
el: '#app',
methods:{
handleSCroll (event) {
let header = document.querySelector(".v-toolbar");
if (window.scrollY > 100) {
console.log(window.scrollY);
header.className += " v-toolbar--bgchange";
}
}
},
created () {
window.addEventListener('scroll', this.handleSCroll);
},
destroyed () {
window.removeEventListener('scroll', this.handleSCroll);
}
})
className
是一個可以任意設置的字符串,重復的類不會被過濾掉。 另一方面, classList.add()
忽略重復的類名,因此您可以替換以下內容:
header.className += " v-toolbar--bgchange";
和:
header.classList.add("v-toolbar--bgchange");
Vue 是 Reactive,為什么要直接改 DOM? 讓我們按照它喜歡的方式來做吧:)
<template lang="pug">
.main-nav(:class="getMainNavClasses")
// your fancy stuff goes here ;)
</template>
<script>
export default {
name: 'MainMenu',
data() {
return {
scrollingUp: false,
scrollingDown: false,
prevScrollpos: window.pageYOffset,
};
},
computed: {
getMainNavClasses() {
return {
'scroll-up': this.scrollingUp,
'scroll-down': this.scrollingDown,
};
},
},
methods: {
scrollNow() {
const currentScrollPos = window.pageYOffset;
if (currentScrollPos == 0) {
this.scrollingUp = false;
this.scrollingDown = false;
return;
}
if (currentScrollPos < 100) return; // set offset here
if (this.prevScrollpos > currentScrollPos) {
// up
this.scrollingDown = false;
this.scrollingUp = true;
} else {
// down
this.scrollingUp = false;
this.scrollingDown = true;
}
this.prevScrollpos = currentScrollPos;
},
handleScroll() {
let doScoll;
window.onscroll = () => {
clearTimeout(doScoll);
doScoll = setTimeout(this.scrollNow, 100); // firing less scroll events
};
},
},
created() {
this.handleScroll();
},
};
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.