mirror of
https://github.com/KevinMidboe/planetposen.git
synced 2025-10-29 17:50:32 +00:00
Intersection observer for cart to always appear on screen when on shop page.
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<router-link to="/cart" class="cart" :class="{ dark: isDark }">
|
<router-link to="/cart"
|
||||||
|
class="cart"
|
||||||
|
:title="cartTitle"
|
||||||
|
:class="{ dark: isDark, offScreen: isHeaderOffScreen }">
|
||||||
|
|
||||||
<div class="cart-counter">
|
<div class="cart-counter">
|
||||||
{{ cartInventory.length }}
|
{{ cartInventory.length }}
|
||||||
</div>
|
</div>
|
||||||
@@ -20,12 +24,28 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
cartItems: [0,0,0,0]
|
isHeaderOffScreen: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
let observer = new IntersectionObserver((entry, observer) => {
|
||||||
|
if (this.$route.name == 'Shop') {
|
||||||
|
const isHeaderIntersecting = entry[0].isIntersecting;
|
||||||
|
this.isHeaderOffScreen = !isHeaderIntersecting;
|
||||||
|
} else {
|
||||||
|
this.isHeaderOffScreen = false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
observer.observe(document.querySelector('#header'))
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
cartInventory() {
|
cartInventory() {
|
||||||
return store.getters['cartModule/inventory']
|
return store.getters['cartModule/inventory']
|
||||||
|
},
|
||||||
|
cartTitle() {
|
||||||
|
let len = this.cartInventory.length;
|
||||||
|
return `Cart with ${ len } products`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -50,6 +70,17 @@ export default {
|
|||||||
margin-right: 0.5rem;
|
margin-right: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.offScreen {
|
||||||
|
position: fixed;
|
||||||
|
top: 0.5rem;
|
||||||
|
right: -6px;
|
||||||
|
padding: 0.5rem;
|
||||||
|
padding-right: 2.5rem;
|
||||||
|
background-color: var(--color-background);
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 0px solid !important;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border-bottom: unset;
|
border-bottom: unset;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user