private async Task InitialiseObserver() { var elementReference = this.IntersectionObserverContext?.Ref?.Current; if (elementReference == null || Equals(elementReference, default(ElementReference))) { throw new Exception(NO_ELEMENT_MESSAGE); } this.Observer = await this.ObserverService.Observe(elementReference.Value, this.OnIntersectUpdate, this.Options); }
public async ValueTask DisposeAsync() { var observer = this.Observer; if (observer == null) { return; } this.Observer = null; await observer.Dispose(); await this.OnDisposed.InvokeAsync(); }
protected override async Task OnAfterRenderAsync(bool firstRender) { if (!firstRender) { return; } var parent = await Parent.ToInteropElement(); var last = await Last.ToInteropElement(); var observer = new IntersectionObserver( new ActionCallback <IntersectionObserverEntry[], IntersectionObserver>( (entries, other) => { var intersectedEntries = entries.Where(a => a.isIntersecting); foreach (var intersectedEntry in intersectedEntries) { Console.WriteLine(intersectedEntry.target.id, intersectedEntry.intersectionRatio); last.innerHTML = intersectedEntry.target.id + " : " + intersectedEntry.intersectionRatio; } return(Task.CompletedTask); } ), new IntersectionObserverInitCachedEntity { root = parent } ); for (var i = 1; i <= 100; i++) { var child = EventHorizonBlazorInterop.FuncClass <Element>( entity => new Element(entity), new string[] { "document", "createElement" }, "div" ); // document.createElement('div'); child.id = i.ToString(); child.innerHTML = child.id; parent.appendChild(child); observer.observe(child); } }
private async void OnIntersectUpdate(IList <IntersectionObserverEntry> entries) { var entry = entries?.FirstOrDefault(); if (entry == null) { return; } await this.IsIntersectingChanged.InvokeAsync(entry.IsIntersecting); await this.OnChange.InvokeAsync(entry); this.IntersectionObserverContext.Entry = entry; this.StateHasChanged(); if (this.Once && entry.IsIntersecting) { await this.Observer.Dispose(); this.Observer = null; } }
private async Task InitialiseObserver() { this.Observer = await this.ObserverService.Observe(this.Element, this.OnIntersectUpdate, this.Options); }