2 releases
0.1.1 | Feb 23, 2023 |
---|---|
0.1.0 | Feb 19, 2023 |
14KB
108 lines
wasm_keyboard
Making keyboard events management in WASM
with web-sys
easier.
Usage
Add this to your Cargo.toml
:
[dependencies]
wasm_keyboard = "0.1"
Example
use std::rc::Rc;
use wasm_bindgen::prelude::*;
use wasm_keyboard::{
macros::{new_simplified_key_handler, start_keywise_keyboard_handler},
uievents_code::{KeyboardEventCode, KEY_W},
};
use web_sys::KeyboardEvent;
// Called when the wasm module is instantiated
#[wasm_bindgen(start)]
fn main() -> Result<(), JsValue> {
// Use `web_sys`'s global `window` function to get a handle on the global
// window object.
let window = web_sys::window().expect("no global `window` exists");
let document = Rc::new(window.document().expect("should have a document on window"));
let body = Rc::new(document.body().expect("document should have a body"));
let w_handler = new_simplified_key_handler!(
KeyboardEventCode::KeyW,
state = (),
keydown = {
let body = body.clone();
let document = document.clone();
move |_state| {
let val = document.create_element("p").unwrap();
val.set_inner_html("W pressed down!");
body.append_child(&val).unwrap();
}
},
keyup = {
let body = body.clone();
let document = document.clone();
move |_state| {
let val = document.create_element("p").unwrap();
val.set_inner_html("W released!");
body.append_child(&val).unwrap();
}
}
);
start_keywise_keyboard_handler!(kh: Kh, document, [KEY_W => w_handler]);
// Manufacture the element we're gonna append
let val = document.create_element("p")?;
val.set_inner_html("Hello from Rust!");
body.append_child(&val)?;
Ok(())
}
See the whole example at https://github.com/JohnScience/wasm_keyboard_example.
SemVer Policy
At the moment, there's no any semver guarantees. The crate is being inactively developed.
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~11MB
~203K SLoC