Add the onvisible event handler to Element (#2911)
* Add the `onvisible` event using the IntersectionObserver * Add a visible example This example is based on https://codepen.io/ryanfinni/pen/VwZeGxN * Remove web-sys CustomEvent feature for html package * update js bindings and hash * Use dioxus doc instead of lorem ipsum * Fix clippy warning * Add get_target method to the event data * Make `get_time` return an Instant instead of a f64 * fix merge conflicts, compilinga * remove target * small nits * serialzie as time_ms * fix timing, works on desktop * remove latent nits, fix hash * box size clippy * fix browserlist cargo.lock --------- Co-authored-by: Evan Almloff <evanalmloff@gmail.com> Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
This commit is contained in:
20 files changed
+961
-289
No files matched your search
@@ -62,6 +62,8 @@ export function serializeEvent(
|
||||
const detail = event.detail;
|
||||
if (detail instanceof ResizeObserverEntry) {
|
||||
extend(serializeResizeEventDetail(detail));
|
||||
} else if (detail instanceof IntersectionObserverEntry) {
|
||||
extend(serializeIntersectionEventDetail(detail));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,21 +131,36 @@ export function serializeResizeEventDetail(
|
||||
border_box_size:
|
||||
detail.borderBoxSize !== undefined
|
||||
? toSerializableResizeObserverSize(
|
||||
detail.borderBoxSize[0],
|
||||
is_inline_width
|
||||
)
|
||||
detail.borderBoxSize[0],
|
||||
is_inline_width
|
||||
)
|
||||
: detail.contentRect,
|
||||
content_box_size:
|
||||
detail.contentBoxSize !== undefined
|
||||
? toSerializableResizeObserverSize(
|
||||
detail.contentBoxSize[0],
|
||||
is_inline_width
|
||||
)
|
||||
detail.contentBoxSize[0],
|
||||
is_inline_width
|
||||
)
|
||||
: detail.contentRect,
|
||||
content_rect: detail.contentRect,
|
||||
};
|
||||
}
|
||||
|
||||
export function serializeIntersectionEventDetail(
|
||||
detail: IntersectionObserverEntry): SerializedEvent {
|
||||
return {
|
||||
bounding_client_rect: detail.boundingClientRect,
|
||||
intersection_ratio: detail.intersectionRatio,
|
||||
intersection_rect: detail.intersectionRect,
|
||||
is_intersecting: detail.isIntersecting,
|
||||
root_bounds: detail.rootBounds,
|
||||
|
||||
// math.floor removes the floating point extra such that we serialize into integer
|
||||
// this *might* become an issue longer term
|
||||
time_ms: Math.floor(Date.now() + detail.time),
|
||||
}
|
||||
}
|
||||
|
||||
function serializeInputEvent(
|
||||
event: InputEvent,
|
||||
target: EventTarget
|
||||
|
||||
Reference in new issue
Block a user