数学建模社区-数学中国
标题:
使用html画一个键盘
[打印本页]
作者:
2744557306
时间:
2024-4-27 10:42
标题:
使用html画一个键盘
<!DOCTYPE html>
0 q$ f- L* D1 {" t& b# O, z/ ]
<html lang="en">
; Z9 F2 Z1 F9 E9 T# r# r
<head>
i4 W1 |# Y/ m" T% o) x U
<meta charset="UTF-8">
4 q! @: M4 F) x% t3 X" s
<meta http-equiv="X-UA-Compatible" content="IE=edge">
$ x+ F/ r8 X" N8 D6 R' {! z. z
<meta name="viewport" content="width=device-width, initial-scale=1.0">
) ~! D8 U* W ?
<link rel="stylesheet" >
a. O G8 U1 y K/ H- U
<title>vector examples Keyboard</title>
2 i4 }$ Z; j& d( E B
</head>
4 l) Y2 I o7 f" e" F0 i% M2 b- p
<body>
4 \3 j& }9 d. I: c! }1 m* R$ X" c
<div id="keyboard"></div>
) E* M& g! ?# l
<!-- <script type="module" src="./Keyboard.js"></script> -->
( S- U1 w1 S( ~5 k0 p; c
<script type="module" src="./temp.js"></script>
4 }3 R# N( f; L2 W7 C6 F! @' |
</body>
2 W. ^6 a$ Q( y1 x
</html>
$ z4 L# h$ s, }1 ?+ r- J
复制代码
import Interactive from "https://vectorjs.org/interactive.js";
+ o q L9 m# P* {9 w
console.log("Interactive", Interactive);
( t- m9 m6 e& a4 y5 ]( i8 b" w
复制代码
/**
+ y. r; f6 t# h
* [url=home.php?mod=space&uid=634908]@title[/url] Keyboard
0 |" x9 c+ i2 K' p6 `" [( ]
* @description This interactive demonstrates how key board input can be used to add interactivity.
K2 N E% e* ^- Y9 ]; ]
* @tags [input]
. j( C J+ v8 U) p1 t, W0 a K
*/
7 \. \) n+ t$ y# x3 _! U" y- R3 ?
// import { Interactive, getScriptName } from "../../index.js";
8 \) ]. N2 d% ?; W8 b
// let interactive = new Interactive(getScriptName());
; g. r$ `8 ^# R U. V% [9 i
import Interactive from "https://vectorjs.org/interactive.js";
3 q: I+ [: F/ U t; |! a
let interactive = new Interactive("keyboard");
6 r, k+ g& ] o$ S. y% Y5 G
interactive.width = 768;
9 u i" E- y8 h- a( |/ i' `: I3 r
interactive.height = 300;
0 n+ l. {. m& |" ^4 E$ A
interactive.border = true;
- X; L/ {# Z4 Y5 Q# T: W
let buffer = "";
4 S, q) z# C S- ]3 c7 o
let keys = [
, }, O: x" b6 X
[
+ z6 l' _9 ]3 c9 c" c- x
"`",
2 B- N/ z8 i0 w( W% A
"1",
- P7 O& K5 ~# p* V" d) ?
"2",
4 L8 X- r% l% Y8 G
"3",
- |" D# d% ^# t4 _) o/ K3 A8 v
"4",
" X. ^2 ]2 m2 e6 ?$ E
"5",
2 D. Y5 F4 m6 B9 X( k2 {+ w
"6",
; X5 f+ w- t/ Y% }7 q8 P/ w {
"7",
+ G$ d2 _( W1 d6 e) Q2 C
"8",
' O3 g o3 S& u2 C
"9",
3 K2 q! I* ~; F7 B* p
"0",
% y4 x: L6 Y/ O- ^/ T8 t, W" S
"-",
+ k; f% f# B5 `3 p
"=",
. C; O/ n& v4 H+ i [
"Backspace",
/ s9 _# }* A/ d9 x7 s( f
],
0 U* v3 x% S3 n# g1 e# ?
["tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\"],
- P: y+ y4 v. d6 m4 w5 W- J r5 U
["CapsLock", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "Enter"],
$ T& I0 U. ^. H2 _ }- P
["Shift", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "Shift"],
7 d: `+ N9 T/ v8 { D3 l- d
[
! |5 w, P4 x5 A: y. q; p
"fn",
* j) j) k, Y* v& @1 L7 i& H) T
"Control",
$ u) K9 D1 f8 f
"Alt",
4 z& ~) e) j3 G5 m% Y6 U/ B
"Meta",
3 b* }6 w. L( T9 @4 B% K+ i
" ",
6 y; d9 Z) c) l; g' {/ `
"Meta",
* v0 _4 T! S; L- Y' Y
"Alt",
1 a8 [/ g) w" h* |" C
"ArrowLeft",
7 f3 g6 N* s( w( L
"ArrowUp",
8 F& Y3 G5 E6 }; Q6 m/ M
"ArrowDown",
1 H5 h4 m' h% \5 U- c2 U3 k
"ArrowRight",
5 v X: F' E0 X# c
],
7 [* N7 A+ N1 P, j
];
, P/ S0 J$ O' D: a5 x
let buttons = [];
+ m# h; m& I) A2 f W, ~% f2 c1 z
let keycodes = {
! a2 J2 O0 f6 C& u
0: { Symbol: 0, Shift: ")" },
# C, y7 N# M( [: C7 }! L
1: { Symbol: 1, Shift: "!" },
) P4 S8 a6 f1 W) v/ y: }, T6 H
2: { Symbol: 2, Shift: "@" },
4 D. Q# @$ r& ~* f7 U
3: { Symbol: 3, Shift: "#" },
) E+ [! i/ C0 c% g4 S+ D
4: { Symbol: 4, Shift: "$" },
Y5 b4 f* G# U9 K. }7 b
5: { Symbol: 5, Shift: "%" },
A# q# G, ]" N$ b3 p) @8 r
6: { Symbol: 6, Shift: "^" },
: H, W/ Y9 p$ \; D+ d& \) k
7: { Symbol: 7, Shift: "&" },
( H% y- e* Y& Y H
8: { Symbol: 8, Shift: "*" },
/ ?/ s+ F) J" {: n7 k- Y
9: { Symbol: 9, Shift: "(" },
7 c' i3 Y9 I9 p) m$ j- m
a: { Symbol: "a", Shift: "A" },
9 b% j, ^/ L2 n' ^
b: { Symbol: "b", Shift: "B" },
! `0 q9 T1 _" A1 N2 j
c: { Symbol: "c", Shift: "C" },
: r. C8 R5 T! K1 ~; r# T. W3 V
d: { Symbol: "d", Shift: "D" },
" m6 C& [- w1 ?; ~# z( L% w
e: { Symbol: "e", Shift: "E" },
3 M* m7 _! U4 y5 m$ `: x0 |
f: { Symbol: "f", Shift: "F" },
. E! G- @7 z6 m7 u" C" M- Z
g: { Symbol: "g", Shift: "G" },
0 {. ?& B2 `4 G
h: { Symbol: "h", Shift: "H" },
" r$ R) I# _- f. K! p% J; \
i: { Symbol: "i", Shift: "I" },
' B' u3 J0 |' ^, p
j: { Symbol: "j", Shift: "J" },
% L, g# Q8 T! p" y8 T
k: { Symbol: "k", Shift: "K" },
& k) X5 e5 W# F7 `# B
l: { Symbol: "l", Shift: "L" },
3 D2 k) _% |$ j2 d& d+ g$ p
m: { Symbol: "m", Shift: "M" },
# {( B3 Y( J& @+ @/ d. w% |
n: { Symbol: "n", Shift: "N" },
7 i8 R' w6 [. } T W$ A
o: { Symbol: "o", Shift: "O" },
8 q. y, P" ]; N/ e' k
p: { Symbol: "p", Shift: "P" },
. h4 s1 t0 L8 z( s* S# ~8 p! s
q: { Symbol: "q", Shift: "Q" },
3 z% t* L2 H. X+ w
r: { Symbol: "r", Shift: "R" },
( r1 _! x; x ~( R7 Q: s
s: { Symbol: "s", Shift: "S" },
& W2 e7 M6 r- L: o* b
t: { Symbol: "t", Shift: "T" },
% X( r* R' {5 t' b) o/ A, J( }1 G
u: { Symbol: "u", Shift: "U" },
{" g" e$ m3 q' y' X% l1 e9 E
v: { Symbol: "v", Shift: "V" },
) }7 v7 O" `$ Y) N9 H
w: { Symbol: "w", Shift: "W" },
[: w! U5 w, o5 ^+ Y7 v
x: { Symbol: "x", Shift: "X" },
4 g' O( t% }/ p+ _* @6 {8 Y, v
y: { Symbol: "y", Shift: "Y" },
; O# F- g8 @0 u; m. A! T/ E
z: { Symbol: "z", Shift: "Z" },
8 C/ ]0 t9 o' w9 X
"`": { Symbol: "`", Shift: "~" },
; ^9 ~5 d: w% l8 F% u! n; n* H; z
"-": { Symbol: "-", Shift: "_" },
" |2 W0 e# x; v6 d0 _# ?# L! s
"=": { Symbol: "=", Shift: "+" },
7 ^7 X6 `& D8 T& o2 `* h v
";": { Symbol: ";", Shift: ":" },
- J* h0 U ^- L( z
"'": { Symbol: "'", Shift: '"' },
9 | X/ s# y2 S2 e* Z8 `1 U% P0 g
"[": { Symbol: "[", Shift: "{" },
- g8 v7 ?5 a( D$ t
"]": { Symbol: "]", Shift: "}" },
& C o4 l: A; x5 z2 C# M0 X: ?
"\\": { Symbol: "\\", Shift: "|" },
$ e5 S8 R( E: V3 s
",": { Symbol: ",", Shift: "<" },
; _! w( i- P- @4 Z$ y% {; y+ E
".": { Symbol: ".", Shift: ">" },
5 W/ g) g0 F( s+ Y2 ]
"/": { Symbol: "/", Shift: "?" },
8 Q% F8 a9 }8 W! z
Backspace: { Symbol: "⌫", Shift: "" },
+ r4 | [8 U& P
tab: { Symbol: " ", Shift: "" },
5 j1 P1 z1 f; E
CapsLock: { Symbol: "⇪", Shift: "" },
% d& s3 U7 L4 ~/ z, {) a" X; d
Shift: { Symbol: "⇧", Shift: "" },
- ^; A f9 {" Q( d' D _ g$ t
Enter: { Symbol: "⏎", Shift: "" },
4 N0 [7 x' w; {7 F: O
Control: { Symbol: "⌃", Shift: "" },
% X3 X. ~" Z7 B
Alt: { Symbol: "Alt", Shift: "" },
: K6 \) ^( ?' F8 @: R a
Meta: { Symbol: "⌘", Shift: "" },
* q# t: d g) C1 B$ t
ArrowLeft: { Symbol: "←", Shift: "" },
7 w) R" {. x/ g# D
ArrowUp: { Symbol: "↑", Shift: "" },
, U7 c" L% R% z5 L5 l0 u+ [' }/ \
ArrowDown: { Symbol: "↓", Shift: "" },
, [" \5 x9 E$ t z4 C" c
ArrowRight: { Symbol: "→", Shift: "" },
* u+ m0 r1 Q- p$ f/ w g& d* Q
" ": { Symbol: " ", Shift: "" },
( W! [, F$ Z+ _. k' O
};
; z& A% d9 r1 |/ T' z3 D. e
let buttonMap = new Map();
1 J$ G/ U( e& z$ n. D6 ~' I
let height = 32;
: g0 e* ]$ R1 G2 K
let margin = 8;
9 L& _& I0 c* \) _+ q
let capslock = interactive.button(0, 0, keycodes["CapsLock"].Symbol);
. T0 e1 s. c( f9 _5 W
let shift = interactive.button(0, 0, keycodes["Shift"].Symbol);
" b4 S0 L) j( L* g# x
for (let row = 0; row < keys.length; row++) {
5 }7 |8 y' h! k5 _& \ Q% `
let x = 32;
/ @# S: L1 n% n3 J
let prev;
/ L! r9 K0 C- o: A
for (let i = 0; i < keys[row].length; i++) {
3 F' q4 z J! C
let key = keys[row][i];
; Z+ U4 H3 X+ d5 @& S2 ~
let width = 32;
3 j# P9 ^' T6 D$ g: O m
let button;
$ k0 X& _, K* v. z" c$ @' E4 z; R0 G
switch (key) {
. o& c0 i2 t9 p% {
case "CapsLock":
' V& G/ e' v9 y( E
button = capslock;
+ I+ C, s" I( U2 w
width = 64;
1 u$ {* S* a) N+ `4 B
break;
; m7 `3 A! w- t4 L F7 s
case "Shift":
4 P l& j# l1 I7 O& b
if (shift.x === 0) {
( q8 |( u, p1 R8 M! T
button = shift;
: p7 N5 i+ l: e8 Y$ ], V* K$ z
} else {
- ?7 n* c( `# o$ g$ j: K q& e, W# w# F
button = interactive.button(
9 i+ w8 d0 J# R' {$ @+ o
0,
4 a; S! b1 b7 y* P( g0 E# S/ u
0,
$ [5 @/ D# ]3 C# n6 V
keycodes[key] != undefined ? keycodes[key].Symbol : key
* n2 O3 O7 e4 f' j% t
);
_5 O4 ^2 v" N. W- F2 h
}
) G3 I, o/ [3 a8 z$ N8 |
width = 90;
9 v. e; ?( c U: u4 b
break;
* Y0 J$ _9 ?/ L O/ e6 ^! [% {4 G
case "tab":
' F1 A% D: z& Q' S: j& R$ q
width = 50;
# ]& a6 D# M/ q/ D/ t0 @) q; O
button = interactive.button(
6 e: n, @( ~! y; s" q
0,
9 T! L) z# d, [% [7 c
0,
* _5 K' D- i9 q3 a; S! M" j% D4 K
keycodes[key] != undefined ? keycodes[key].Symbol : key
* j5 w2 T6 e: s4 ]9 {: W
);
2 s$ E- l0 i5 o+ m( k* _% v6 R e
break;
J) }" r& Z/ r% u* q" t3 d
case " ":
1 b" A; R* ~. I
width = 176;
* E7 {! B% x# e6 U
button = interactive.button(
* d* w2 R, H2 v- t9 e/ b W
0,
1 `6 v+ `* z3 G$ D D, z! [( r+ _
0,
! L* }/ E6 X4 I
keycodes[key] != undefined ? keycodes[key].Symbol : key
I* R: V6 ^& r+ g
);
6 J0 f! M7 S: V- I* u+ K1 I
break;
1 g$ V0 d7 T; C, ]1 h9 ]7 O! E
case "Meta":
0 y8 w" Y8 M, g) H" r# d
width = 50;
" K5 i& L1 j: {0 g& W
button = interactive.button(
% L% z3 O8 f! G y
0,
, R6 j4 @% O4 f
0,
3 o/ @; i3 V; e. J% d
keycodes[key] != undefined ? keycodes[key].Symbol : key
; J/ g C5 v" C* p
);
7 v, t# d8 u5 g7 v8 z, ^! t
break;
$ n: E6 ~$ I# u) _" u6 g8 i
default:
" ?7 J6 y0 g3 W) D' I
button = interactive.button(
: y& @1 }8 M/ B+ s, ~8 \
0,
5 H* M q/ R6 F- t
0,
2 H4 e& P$ _* ?; a
keycodes[key] != undefined ? keycodes[key].Symbol : key
9 a5 `9 M1 w. I; v8 d
);
. t S: y: k* w1 `4 q# P3 N
if (keycodes[key] != undefined) {
- a& G( F0 x' p( j* p
if (keycodes[key].Shift != "") {
+ A2 P5 I" k3 P2 }
button.addDependency(shift, capslock);
6 \- V' B C6 U6 Z4 T: w- E
button.update = () => {
/ X, t4 |- b( D- C" n, b% I
if (shift.active || capslock.active) {
$ F7 C. f' d$ }3 G
button.label.contents = keycodes[key].Shift;
8 {% m L, M2 H1 }1 }
} else {
- [* a" l7 W- T( S4 j
button.label.contents = keycodes[key].Symbol;
. ?8 a' o( }3 E) D& g' n; t/ S: q
}
9 o/ |7 J' |' |( w# u2 T
};
$ l3 j5 o0 _: F' c
}
1 O5 `% F+ G+ w
}
8 b- S- a. N. U
}
. w: v$ _6 Q3 l% P
button.x = x;
9 G. b. G: |6 m. v
button.y = 64 + row * (height + margin);
0 Q0 R/ q) ?$ j* I: s. y% y
if (button.box.width < width) {
) i% K1 m: x& i' n/ @: F4 r' k
button.box.width = width;
5 S* h1 R* J) O2 U5 R7 a
}
: k+ `7 {' E0 C0 i3 j' p
let bbox = button.root.getBBox();
% I% ^' {' g0 w6 k
x += bbox.width + margin;
5 X0 b: c# ^' I$ L/ n4 g
buttons.push(button);
y* C/ a+ K/ Y1 s* h! f2 ^: K
prev = button;
/ o$ E. x- b" w2 U. T+ e
buttonMap.set(key, button);
/ {+ |8 N, z a! t2 a& ? d
if (key === "ArrowUp") {
2 s# w _3 q5 Q) [4 g
button.box.height = 16;
[: @* s! B" d
button.label.root.style.display = "none";
. M( M* Y2 y9 {/ [1 W; ` p' w) s# P
} else if (key === "ArrowDown") {
; H3 B6 ~/ @% h5 _
button.box.height = 16;
( X$ t- J8 W) p4 o2 D
button.x -= 32 + margin;
, y# c! Y( D, V/ M/ }, z4 D, @/ j
button.y += 16;
, |! g. F: m- B1 r
button.label.root.style.display = "none";
3 |# a( E. O# E7 m( p0 l& m
x -= bbox.width + margin;
- s% {+ x9 Z0 ?3 i0 \
}
3 S( Z2 S5 A J% q7 t, {
}
2 E( ?. ^. }, u0 _ b6 |& N
let right = prev.x;
3 T, [# d, O( e- D" j
if (right < 630) {
5 u3 Y& ?& s5 l- F. P5 ]/ g
prev.box.width = 630 - right;
- D0 ^4 s7 |5 ^; n6 R
}
: Z# g$ N' _" g* ^5 p
}
. d& j: ?3 h/ Z' Y7 T6 t, W- `/ y
// console.log(keycodes["0"], shift, capslock);
) o' T+ M9 r/ c
let active = [];
8 v& R0 t" }- Y, J- k+ j
window.onkeydown = function (event) {
- b0 m. ]7 j, N: a1 T
for (let i = 0; i < buttons.length; i++) {
2 Q0 g4 L- ?2 ~! R4 i; q& C i: F
let button = buttons[i];
6 w, ?% p, L; L8 o: n
if (
/ @/ B6 n1 o4 _, q a9 ]
button.label.contents === event.key ||
0 F4 I6 |- v; x* r) [) _
(keycodes[event.key] != undefined &&
% H) N8 Z4 q% ~
button.label.contents === keycodes[event.key].Symbol)
9 s$ M! U4 t; j, X" E- z0 |( ~! W
) {
7 \6 v$ v' z. @- p: A) a
button.box.style.fill = "#f8f8f8";
5 t$ Z9 y1 x3 N1 j
button.label.style.fill = "#404040";
% j3 E* G1 O) P$ l, N
button.active = true;
0 q1 e! Z# d7 h+ f! x( v& [
active.push(button);
1 p% K/ s0 I# N' v8 u
}
& ^8 J1 Z! g8 q& g! z
}
5 Z. U6 H$ }, p) m5 ?" o
buffer += `'${event.key}',`;
. u" P% q: O! [2 T& {
};
5 X( C7 x" Y4 X8 S$ @
window.onkeyup = function (event) {
9 a* b1 H3 }* `2 q0 w8 T
let newActive = [];
5 q& Q/ I8 E9 q- C6 i6 U6 B3 M
for (let button of active) {
. l' B& f5 M4 N: _& {3 X3 X, s
if (
3 d9 A* k1 c- o+ W2 ~. b# I7 v0 K
button.label.contents === event.key ||
. u. S+ ^- r$ B% v. I
(keycodes[event.key] != undefined &&
; X$ e; ~+ P( f& b2 \/ c
button.label.contents === keycodes[event.key].Symbol)
`6 H. g7 K0 Z% r& I1 \7 o
) {
; c+ _% a% c! { G$ X* L* k
button.box.style.fill = "";
" G; I6 p' y9 u5 F
button.label.style.fill = "";
% d3 Y. \3 V. k" \& Q3 h7 X5 ~
button.active = false;
) }. I9 F* v8 A2 n
} else {
% H: t R, v$ H$ f! X3 p0 e5 O2 p
newActive.push(button);
: a: Q* w S& X% _; M
}
E2 E! N. Q$ _5 a
}
0 l" T% M& r+ b C! ?
active = newActive;
6 `- n r1 U# D! x- A F
};
/ I; F1 L2 t- b7 }8 L+ p5 m
let bbox = interactive.input.root.getBBox();
9 G4 k4 R4 d8 L8 A; i p; |. h3 u
interactive.setViewBox(
; _4 t, h0 I: i/ j- O2 D) K! w
bbox.x - margin,
5 p# s% X& r- a
bbox.y,
" B; B2 Z, v1 [/ j6 m
bbox.width + 2 * margin,
7 G0 N" ? O3 Y3 [/ C0 S# q
bbox.height
0 B" ?$ {7 l( \1 D8 H5 N0 [
);
5 q: t/ ?, C: k1 m
//# sourceMappingURL=keyboard.js.map
- B- `) k3 a! y# F" D( e9 W& ~
! i) D( a/ A( _ k' k9 V* S
复制代码
- s' u( S/ f" c* E9 M
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5