intersection_observer.py 771 B

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