Something went wrong. Try again.
A hardware-accelerated GPU terminal emulator focusing to run in desktops and browsers.
Something went wrong. Try again.
1.0 kB · 36 lines
Rust
at main
12345678910111213141516171819202122232425262728293031323334353637use js_sys::Array;use wasm_bindgen::prelude::Closure;use wasm_bindgen::JsCast;use web_sys::{Element, IntersectionObserver, IntersectionObserverEntry};
pub(super) struct IntersectionObserverHandle { observer: IntersectionObserver, _closure: Closure<dyn FnMut(Array)>,}
impl IntersectionObserverHandle { pub fn new<F>(element: &Element, mut callback: F) -> Self where F: 'static + FnMut(bool), { let closure = Closure::new(move |entries: Array| { let entry: IntersectionObserverEntry = entries.get(0).unchecked_into(); callback(entry.is_intersecting()); }); let observer = IntersectionObserver::new(closure.as_ref().unchecked_ref()) // we don't provide any `options` .expect("Invalid `options`"); observer.observe(element);
Self { observer, _closure: closure, } }}
impl Drop for IntersectionObserverHandle { fn drop(&mut self) { self.observer.disconnect() }}