mouse_event.rs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. use dioxus::prelude::*;
  2. use dioxus_core::UiEvent;
  3. use dioxus_html::on::MouseData;
  4. fn main() {
  5. dioxus::desktop::launch(app);
  6. }
  7. fn app(cx: Scope) -> Element {
  8. let page_coordinates = use_state(&cx, || "".to_string());
  9. let screen_coordinates = use_state(&cx, || "".to_string());
  10. let element_coordinates = use_state(&cx, || "".to_string());
  11. let buttons = use_state(&cx, || "".to_string());
  12. let modifiers = use_state(&cx, || "".to_string());
  13. let container_style = r#"
  14. display: flex;
  15. flex-direction: column;
  16. align-items: center;
  17. "#;
  18. let rect_style = r#"
  19. background: deepskyblue;
  20. height: 50vh;
  21. width: 50vw;
  22. "#;
  23. let update_mouse_position = move |event: UiEvent<MouseData>| {
  24. let mouse_data = event.data;
  25. page_coordinates.set(format!("{:?}", mouse_data.page_coordinates()));
  26. screen_coordinates.set(format!("{:?}", mouse_data.screen_coordinates()));
  27. element_coordinates.set(format!("{:?}", mouse_data.element_coordinates()));
  28. // Note: client coordinates are also available, but they would be the same as the page coordinates in this example, because there is no scrolling.
  29. buttons.set(format!("{:?}", mouse_data.held_buttons()));
  30. modifiers.set(format!("{:?}", mouse_data.modifiers()));
  31. };
  32. cx.render(rsx! (
  33. div {
  34. style: "{container_style}",
  35. "Hover over to display coordinates:",
  36. div {
  37. style: "{rect_style}",
  38. onmousemove: update_mouse_position,
  39. prevent_default: "mousedown",
  40. }
  41. div {"Page coordinates: {page_coordinates}"},
  42. div {"Screen coordinates: {screen_coordinates}"},
  43. div {"Element coordinates: {element_coordinates}"},
  44. div {"Buttons: {buttons}"},
  45. div {"Modifiers: {modifiers}"},
  46. }
  47. ))
  48. }