index.js 574 B

123456789101112131415161718192021
  1. export default function (Alpine) {
  2. Alpine.directive('intersect', (el, { expression, modifiers }, { evaluateLater, cleanup }) => {
  3. let evaluate = evaluateLater(expression)
  4. let observer = new IntersectionObserver(entries => {
  5. entries.forEach(entry => {
  6. if (entry.intersectionRatio === 0) return
  7. evaluate()
  8. modifiers.includes('once') && observer.disconnect()
  9. })
  10. })
  11. observer.observe(el)
  12. cleanup(() => {
  13. observer.disconnect()
  14. })
  15. })
  16. }