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