- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7953 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2978
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- <!DOCTYPE html>
2 i& Q7 B m3 V - <html lang="en">0 z1 H/ H5 v5 Q' [
- <head>
& m. X! j0 m/ ?& f' t5 I9 n2 q7 O - <meta charset="UTF-8">
$ ~+ L6 R0 W2 w3 `/ W* u+ k - <meta http-equiv="X-UA-Compatible" content="IE=edge">6 ^4 O\" }! L: p Z\" y/ T' X
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
. O* K' _9 K\" }( y' u/ _2 J$ u; i - <link rel="stylesheet" >
! ^* `9 x |: q! w3 y) G - <title>vector examples Keyboard</title>
- {: N) T5 R7 V* U/ D* t8 p* S - </head>! |1 Y% @( { _% T
- <body>
9 b8 V% Q' Y1 Q - <div id="keyboard"></div>
8 H* C& J' C$ W \% B$ Y - <!-- <script type="module" src="./Keyboard.js"></script> -->3 D3 G, ], O( |3 H7 Q0 D
- <script type="module" src="./temp.js"></script>- O- a& [7 T9 Y9 w
- </body>
9 ]\" |5 a/ i2 a5 |4 M - </html>$ H6 j+ d3 ?1 u. m2 @: k; Y
复制代码- import Interactive from "https://vectorjs.org/interactive.js";' ]( d- c- n# e1 r
- console.log("Interactive", Interactive);
- Q* g( p' w% h2 \
复制代码- /**% F8 |5 Q r3 T) Z# }5 e
- * [url=home.php?mod=space&uid=634908]@title[/url] Keyboard2 `7 y6 F4 }' @
- * @description This interactive demonstrates how key board input can be used to add interactivity.
# B; e4 t/ B4 c, Y - * @tags [input]
. z$ Q' d* j' j2 L; R - */
/ ]$ F; |4 D$ p0 o! u - // import { Interactive, getScriptName } from "../../index.js";3 G8 ~/ x0 X* n- p
- // let interactive = new Interactive(getScriptName());
# u\" J+ Z: b9 b - import Interactive from "https://vectorjs.org/interactive.js";, I& N\" K, E# ]: }\" Y\" y
- let interactive = new Interactive("keyboard");
' w, L/ v: P( t: C/ l) V* O* [ - interactive.width = 768;
9 |' ?0 Z' e: K4 E7 H5 L7 @9 Q' t - interactive.height = 300;
' t2 ]% F4 f4 H) H% [ - interactive.border = true;
; a8 U, v5 O/ Y3 ~ - let buffer = "";8 [4 \$ Q4 i, W2 h
- let keys = [, G* _$ X' l$ x- ] ~, F
- [' m3 w\" J7 N7 ]; b
- "`",
, w- {& Q* L2 K* E: b( ~ - "1",6 B6 L7 T- g6 n
- "2",
. J% u- g: h6 {& Y\" G3 q - "3",! \: k! P1 ~1 z\" O. s
- "4",
+ E1 A7 ` I3 _1 F+ c# O& Y- F( Z - "5",3 i7 T8 [ ~# N( Q0 H; g
- "6",
# J6 \* I) s- i3 u/ V; G - "7",
* g# v9 ^8 N, m' s- ?' \ - "8",
Q3 {% N7 l- S* U* k a3 j3 Y) h - "9",* V\" y0 D s% X) G5 s* E
- "0",& I4 Z2 W' \ h7 k' y- M) o
- "-",
7 ]) g! l6 [) w9 v: m! j - "=",4 k# ?/ |8 Y) A/ M
- "Backspace",$ i- P- W3 B/ v; l6 r$ d
- ],- ~. H0 |9 O% {
- ["tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\"],
\" J1 Q' e# e$ D4 Y& \$ f - ["CapsLock", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "Enter"],9 U/ ^; Y5 B\" ?7 D\" E j$ k
- ["Shift", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "Shift"],$ F/ C) W$ N3 _7 n) A7 K5 Q
- [ Z! w3 z7 a. F# G) h5 ?' S1 `
- "fn",
! L% f- |; L6 D& r% r. J - "Control",. @, {5 k$ m9 m
- "Alt",6 F! n, I\" |! `# L2 q8 b
- "Meta",
2 F8 D9 N2 T0 D - " ", }) w$ A4 H) K+ \/ V% ]+ q
- "Meta",
\" l0 B8 f) v8 N - "Alt",
& Q5 M. g: z; W) V2 v - "ArrowLeft",5 t% e% a2 W- Y1 v( T8 W
- "ArrowUp",+ N/ V7 h8 I! W
- "ArrowDown",( x# @8 X) U6 M) \, p
- "ArrowRight",
2 {. H7 `. s8 a+ H; ^$ ^$ D& | - ],% L j8 j, P/ d. X
- ];
% O0 _! \ J+ G3 M: R& a - let buttons = [];( q& e6 e# A) b I- Q' ? E* o2 [
- let keycodes = {
# J7 Q- s7 w6 |# I; a/ G - 0: { Symbol: 0, Shift: ")" },# }+ ~$ Z$ j3 @# D$ I
- 1: { Symbol: 1, Shift: "!" },$ q n/ i: O4 Y3 M( d\" k( m
- 2: { Symbol: 2, Shift: "@" },1 S3 c; b* D4 v: Y
- 3: { Symbol: 3, Shift: "#" },
$ ^) v6 n) s5 R) T( w - 4: { Symbol: 4, Shift: "$" },
, `1 @3 V$ Y+ o5 [( ~6 S5 s- s - 5: { Symbol: 5, Shift: "%" },# m( v# J2 v) h- |! Q
- 6: { Symbol: 6, Shift: "^" },! v5 c' h: r4 f/ H8 o. W
- 7: { Symbol: 7, Shift: "&" },
! R5 S& m$ V( ` - 8: { Symbol: 8, Shift: "*" },
* T- ?2 u( u; l! n$ o K - 9: { Symbol: 9, Shift: "(" },8 n4 F( w- X% P( o
- a: { Symbol: "a", Shift: "A" },) E- y x- s( B/ j5 Z\" k
- b: { Symbol: "b", Shift: "B" },+ d8 W; O+ x* }: Z- {; w, F! L
- c: { Symbol: "c", Shift: "C" },
6 Y* V# b+ p\" |. b; o - d: { Symbol: "d", Shift: "D" },
# ^8 K1 ]/ g+ D. _4 f# G - e: { Symbol: "e", Shift: "E" },# {: q+ u( h% l
- f: { Symbol: "f", Shift: "F" },* l( ^% M) j; |; M8 u& h
- g: { Symbol: "g", Shift: "G" },
* U8 ` P( q$ g' i4 f - h: { Symbol: "h", Shift: "H" },! ?8 y6 C- a0 d5 h, G% R) r( B
- i: { Symbol: "i", Shift: "I" },
4 ]1 i q- B1 o6 z - j: { Symbol: "j", Shift: "J" },
/ d/ q2 B* C+ J U - k: { Symbol: "k", Shift: "K" },
0 j- E\" o: y! e5 y1 g - l: { Symbol: "l", Shift: "L" },
3 G' [- t9 c$ L' V+ W( ^5 } - m: { Symbol: "m", Shift: "M" },
8 l$ }. M5 q9 J: A* e4 s - n: { Symbol: "n", Shift: "N" },; n5 ^0 i o5 c. f
- o: { Symbol: "o", Shift: "O" },2 n- e' j( Q! I/ n& G- q3 a4 \
- p: { Symbol: "p", Shift: "P" },
. |) E\" J& b: a$ l\" ^& [& y - q: { Symbol: "q", Shift: "Q" },8 q1 [- b9 Z% V2 W\" z9 G# }! z
- r: { Symbol: "r", Shift: "R" },
\" T, N# A6 C3 B! U+ t! k% q9 g* R% b - s: { Symbol: "s", Shift: "S" },6 c* Y& k7 g9 E5 v* o7 {
- t: { Symbol: "t", Shift: "T" },
! s\" _7 x4 e% i% O - u: { Symbol: "u", Shift: "U" },9 A7 r\" ^! W\" p+ P X
- v: { Symbol: "v", Shift: "V" },! x6 E- |$ k3 s% s V
- w: { Symbol: "w", Shift: "W" },# ~3 P% {& t1 X+ F: J, D( T- [
- x: { Symbol: "x", Shift: "X" },+ _# S% N4 I: k2 } O\" p$ G* L
- y: { Symbol: "y", Shift: "Y" },# ?, j- H& S$ t
- z: { Symbol: "z", Shift: "Z" },( j% i7 r6 Z8 O: G
- "`": { Symbol: "`", Shift: "~" },* d: U8 a4 W5 n: F5 V& k\" G
- "-": { Symbol: "-", Shift: "_" },
' |) I4 i) J' p ]& |' D% u, O, o - "=": { Symbol: "=", Shift: "+" },
( B+ J3 z/ F& B1 r+ A* y! H1 } - ";": { Symbol: ";", Shift: ":" },. {3 x& {! W5 _# J0 }
- "'": { Symbol: "'", Shift: '"' },
% B6 g! w\" L1 L# h4 @2 I& L+ t - "[": { Symbol: "[", Shift: "{" },+ k6 ]1 q8 M8 ^. K/ \$ t4 B7 j
- "]": { Symbol: "]", Shift: "}" },
0 k) `, i' g% i8 _ ~; n- [# y - "\\": { Symbol: "\\", Shift: "|" },
& Y& G- S; m( Q. F - ",": { Symbol: ",", Shift: "<" },
4 f3 c+ }; R$ j) c) f8 H - ".": { Symbol: ".", Shift: ">" },
# d& q8 u- N8 `# Y' N# d - "/": { Symbol: "/", Shift: "?" },5 m( G) U\" d8 T! u) |7 }
- Backspace: { Symbol: "⌫", Shift: "" },
. ]) \; }; ^\" s8 { - tab: { Symbol: " ", Shift: "" },
S\" r6 Q# H! X9 v - CapsLock: { Symbol: "⇪", Shift: "" },8 B$ F7 \6 o& g7 ^) T O& V. r) [
- Shift: { Symbol: "⇧", Shift: "" },
- `7 Z- i5 t( b6 k7 g# H, X! R& E/ K - Enter: { Symbol: "⏎", Shift: "" },\" i# I& @' R/ |6 @% J: Y3 S3 ^
- Control: { Symbol: "⌃", Shift: "" },0 A) m' ^\" Q4 Y1 W\" F
- Alt: { Symbol: "Alt", Shift: "" },; K& I4 Q; l1 ~# |; \0 R- C
- Meta: { Symbol: "⌘", Shift: "" },: ]5 m# V8 o/ ]* }2 ]4 p, z
- ArrowLeft: { Symbol: "←", Shift: "" },
7 ]6 Y) i2 j0 J - ArrowUp: { Symbol: "↑", Shift: "" },: w6 g: Z: ^# p+ v3 T6 `# _
- ArrowDown: { Symbol: "↓", Shift: "" },$ c1 u! l' Q5 H- w7 G
- ArrowRight: { Symbol: "→", Shift: "" },& c) p5 a+ c# m/ n* J
- " ": { Symbol: " ", Shift: "" },
$ F+ [# ~( F/ E* { - };2 B& |9 `' P/ P7 B
- let buttonMap = new Map();/ \9 O. D; f\" B
- let height = 32;
$ I# [! q& m; d - let margin = 8;
/ s( B7 T( A5 f7 T2 f - let capslock = interactive.button(0, 0, keycodes["CapsLock"].Symbol);
X/ O/ ?' j* E ^8 Y, m, z - let shift = interactive.button(0, 0, keycodes["Shift"].Symbol);
4 P* d! G y i `) B1 ~ - for (let row = 0; row < keys.length; row++) {
$ Q6 ^\" {: C: G8 _ - let x = 32;+ Y; g8 t& W% T
- let prev;
\" ^5 D2 i7 @/ Y1 V( B# l- } - for (let i = 0; i < keys[row].length; i++) {
! k7 \! q1 |0 P2 y9 g - let key = keys[row][i];# e' T! B; i; Y$ I( [! u
- let width = 32;
2 U8 ^\" s, V, b- f$ N - let button;; c+ d) p3 O# D2 X. o+ _5 C/ b
- switch (key) {( \8 z' X' t2 ]/ i! ]
- case "CapsLock":
6 h! @- n8 s\" A! s - button = capslock;
* D R: ]+ s1 q - width = 64;
5 q& e4 f3 U9 X - break;& r! T7 X$ G3 e+ V) v
- case "Shift":
; U2 J( Q( B5 N, \ - if (shift.x === 0) {; ^2 c3 h2 k7 n' N
- button = shift;; `, l9 K O+ ^! I2 b
- } else {
: A4 C' R: D3 B$ s7 j D7 U - button = interactive.button(2 i# T6 X9 r, c9 `, C+ ^% ?. |6 [
- 0,! m3 `1 x H. Z: Y; t' R
- 0,
3 y# \/ P1 ]( i6 n - keycodes[key] != undefined ? keycodes[key].Symbol : key8 A. h U J7 ], \( d8 Q$ k) _
- );
5 W# u y8 \4 U- }7 ] S- Q# G - }2 u5 T' D4 Q. q+ R6 G
- width = 90;4 K* Z1 a7 _3 I7 H* r
- break;
; h K6 X( v5 ]1 s - case "tab":
% b- P5 E9 {) b0 G0 _ - width = 50;
7 y0 t {) F* h\" v, P8 S5 ~ - button = interactive.button(2 `, V5 O: M) m+ b/ s
- 0,
o- F8 J C' G* Q: l3 q - 0,
& q! o% H8 {& i - keycodes[key] != undefined ? keycodes[key].Symbol : key
5 c; |6 E+ M% c) L\" L. R4 _6 ]* X - );% o' N/ Q( l$ n
- break;9 U. d# k/ R3 Z M
- case " ":
/ A+ y9 O1 O* C3 g( |4 q\" k* g - width = 176;3 ~& q0 T& _% [- m4 y% M
- button = interactive.button(4 W3 ?1 h+ R; b1 H2 H+ a, z
- 0,
% _8 P. j6 I$ m. G' k' O4 ^# B% b - 0,7 |* u4 j. g4 T: L! N9 s g& y+ U# I
- keycodes[key] != undefined ? keycodes[key].Symbol : key
y5 @, m- h# f: W7 @ Q - );\" Z) u4 J1 ?4 U5 ^5 J l6 y
- break;2 I7 P; [) m! M$ h3 i- X, Q\" E8 M
- case "Meta":
+ z5 S* P- G) n\" u; U% t+ e - width = 50; z- H* c3 `. n) |
- button = interactive.button(. y- J8 q! f' ^2 W! `) {- R- P/ c
- 0,
$ H2 @) R4 j7 U - 0,
% x/ q2 v# c8 A2 l9 I7 Z - keycodes[key] != undefined ? keycodes[key].Symbol : key9 B% h8 i& ]! r ~ o* w
- );
% l' @2 U6 v T* \ - break;7 |3 H. m5 U4 M, A3 R- P9 m5 L/ D
- default:
7 s+ T) t8 Y' ]* a2 V; j - button = interactive.button( W; I% u G2 \: [$ |/ T; t$ \
- 0,
$ O4 F$ b\" g+ _$ i. | - 0,
& ^( P4 h) ~' _7 v% ^7 a! E - keycodes[key] != undefined ? keycodes[key].Symbol : key
4 b# R0 ~) Y. o3 I g4 J9 g r - );! F# ~ e# y; J4 Q' `$ V( _: U
- if (keycodes[key] != undefined) {
% E0 }- \' S+ P# c; a - if (keycodes[key].Shift != "") {( z. w% j) Q& |7 y) q, q
- button.addDependency(shift, capslock);
: F' {& }' } r - button.update = () => {5 S+ R+ l6 h8 Z1 a
- if (shift.active || capslock.active) {
1 O8 P: t3 |6 ~$ c! [% o, V\" M: d& O - button.label.contents = keycodes[key].Shift;+ ^$ d9 c$ X% F' d3 _# f
- } else {
2 J* `& i0 m! ~ - button.label.contents = keycodes[key].Symbol;( o5 E- e9 S1 v1 P. o
- }5 i4 U4 p3 P# C% V2 J\" l
- };! D\" p) }7 I2 p+ u( _
- }) w' U1 J8 x! U3 Y* I\" d
- }
; M9 h' f$ Z5 h+ T9 U - }1 J/ M+ r: L ]9 W' ^! m8 ]
- button.x = x;' |$ e6 G+ L2 s; O0 E: e
- button.y = 64 + row * (height + margin);
/ y) ]! I Z3 F q% R; C f2 x - if (button.box.width < width) {- V) o9 [8 _6 @/ Q: z0 a$ c9 v
- button.box.width = width;
$ J) H5 m5 v+ l7 x0 A! B8 z7 c$ m$ B - } p8 o$ M% z' q0 O$ e$ I' M
- let bbox = button.root.getBBox();
* d2 f2 }: X$ j$ L/ C$ p- y - x += bbox.width + margin;
0 ?, T$ \( ^( H; h( v* J9 }/ [ - buttons.push(button);
J/ v/ U\" H2 D - prev = button;$ u& U8 O& H f' ]9 G9 }
- buttonMap.set(key, button);
( a7 D( n! d5 n4 ~1 Z/ t9 d - if (key === "ArrowUp") {
, s8 o\" l' u4 k- E\" C - button.box.height = 16;
2 J& G, P; @/ e2 y* N# s. B+ { - button.label.root.style.display = "none";
' t( ?( h) `% m8 k. d+ t - } else if (key === "ArrowDown") {3 c% w2 O6 G3 o w4 B& {+ e h
- button.box.height = 16;( i6 a$ D0 ^7 G+ e2 V( L5 Q
- button.x -= 32 + margin;
( E/ V3 P5 b\" w1 X: X$ F P - button.y += 16;5 H( E) [4 [1 Q
- button.label.root.style.display = "none";! s2 c5 k! a\" a% f\" ~# z/ a5 k
- x -= bbox.width + margin;
( D7 c- ^- _0 ~ x7 o C - }$ i* j! e! I- P. T# l( ^, F
- }: ~ w# O& q0 Y/ [% j
- let right = prev.x;
) [- o$ q4 w) j5 W5 d2 n$ ^8 k - if (right < 630) {
* G% M( R2 v& V9 `* Y; j - prev.box.width = 630 - right;
$ r) q) d! M/ c5 F2 H6 P6 P - }
8 w, f+ Y. J* ^8 Q5 J - }' z\" [ H: o O, i+ ~: o
- // console.log(keycodes["0"], shift, capslock);
9 \\" R$ M* N' O* V, s' M - let active = [];4 G; n* O; D( v
- window.onkeydown = function (event) {
0 Q4 Q s% G# o! r. L0 L5 V - for (let i = 0; i < buttons.length; i++) {
% I1 u! _$ G# q4 g& m - let button = buttons[i];
4 [ Y. h7 K3 T/ Q% s0 ~ - if (
0 L- p8 V2 k7 p& r$ e1 v: Z - button.label.contents === event.key ||, |: X& \4 x1 O\" J0 ]
- (keycodes[event.key] != undefined &&, m m2 n/ ^! x# C. s' U
- button.label.contents === keycodes[event.key].Symbol)2 p1 {4 a' @# W$ X0 @+ f% X. y1 w
- ) {
/ x) |3 d! ^$ [4 n2 i - button.box.style.fill = "#f8f8f8";0 n( ^( [6 r0 M9 D; ?+ Q
- button.label.style.fill = "#404040";
4 `) g( J* ^0 ?# e - button.active = true;% b; e4 S2 V7 x# D' c0 G' S
- active.push(button);
; i, k% E& a+ n7 k& f7 N - }8 x9 s/ x* P, r4 M) k) }6 m
- }
+ C0 @ J* C; V) K. H2 J - buffer += `'${event.key}',`;; f, }5 q) H0 O/ \
- };# Z. h0 o8 E4 X8 E9 \1 e* j
- window.onkeyup = function (event) {
7 _( ^- _% N3 e1 d - let newActive = [];% G( r E- d3 l! i. ?( L- t: u
- for (let button of active) {
5 ?. J G( z# ?* I - if (
6 A ^# j! A8 z4 f7 r& W/ q! r - button.label.contents === event.key ||
! z2 e) F- f$ H' S8 I3 {% s - (keycodes[event.key] != undefined &&6 o: J0 G. g( v$ T# P
- button.label.contents === keycodes[event.key].Symbol)
( p3 ]3 ?& g( a( F2 {! H Z - ) {
& V\" B& s# Q, f E - button.box.style.fill = "";$ M- d6 Z\" n7 ]6 h; N
- button.label.style.fill = "";( B% ?: Q0 ^) ^5 l! C/ b) g! ^1 p$ z
- button.active = false;
! t9 N* u. E# ~) t2 _& R - } else {0 [. w\" O D: b3 \6 Z9 h- b/ R& V8 d
- newActive.push(button);, d( I+ Z: x* P, m
- }
/ O6 s* |% L, e( \2 S - }
, i7 K( C6 j! h* b' X - active = newActive;2 @8 Y: F4 L- j; n
- };: J\" W% m9 J4 x+ g# a
- let bbox = interactive.input.root.getBBox();9 \& g5 |: @8 X, e% j2 {
- interactive.setViewBox(
, ]6 l9 R2 x& \# c\" H/ v' r - bbox.x - margin,
/ _. u4 {\" C, f. [* G - bbox.y,
- C\" F9 J4 ?, p: I1 P9 L5 y - bbox.width + 2 * margin,9 V+ f' T7 i( h) p3 ?& _5 l. U
- bbox.height# k& q) W8 R5 H( C
- );( B4 P+ J. u8 ?3 ^! P6 M8 C
- //# sourceMappingURL=keyboard.js.map
3 _. D% O# U# {6 R - 8 l0 M/ v( f/ q\" M7 X
复制代码
3 ]1 H4 x8 U# R8 v7 S+ j# y |
zan
|