intersection_observer.py 880 B

123456789101112131415161718192021222324
  1. from pathlib import Path
  2. from typing import Callable
  3. from nicegui.dependencies import register_vue_component
  4. from nicegui.element import Element
  5. from nicegui.events import EventArguments, handle_event
  6. register_vue_component(name='intersection_observer', path=Path(__file__).parent / 'intersection_observer.js')
  7. class IntersectionObserver(Element):
  8. def __init__(self, *, on_intersection: Callable) -> None:
  9. super().__init__('intersection_observer')
  10. self.on_intersection = on_intersection
  11. self.active = True
  12. self.on('intersection', self.handle_intersection)
  13. self.use_component('intersection_observer')
  14. def handle_intersection(self, _) -> None:
  15. self.run_method('stop')
  16. if self.active:
  17. handle_event(self.on_intersection, EventArguments(sender=self, client=self.client))
  18. self.active = False