键盘交互

Paper.js 中你能以两种方式与键盘进行交互:你可以监听按键事件并响应这些事件,或者你可以随时检查指定键的状态,以检查是否按下了键。本教程具体解释了这两种方法。

接收按键事件

要获取有关按键的信息,请在脚本中定义onKeyDownonKeyUp处理函数。

下面的示例中,我们通过创建文本项并修改内容,来给用户提供哪个键被按下/释放的反馈:

  1. // 在视图中心创建一个居中的文本项:
  2. var text = new PointText({
  3. point: view.center,
  4. content: 'Click here to focus and then press some keys.',
  5. justification: 'center',
  6. fontSize: 15
  7. });
  8. function onKeyDown(event) {
  9. // 当键被按下,设置文本项的内容:
  10. text.content = 'The ' + event.key + ' key was pressed!';
  11. }
  12. function onKeyUp(event) {
  13. // 当键释放,设置文本项的内容:
  14. text.content = 'The ' + event.key + ' key was released!';
  15. }

请注意:

按住键时会连续触发 onKeyDown 事件。

事件对象

上面的示例使用 event.key 属性来查看按下了哪个键。 事件对象包含几个描述按键事件的属性:

event.key:按下的键。

event.character:按键生成的字符。 例如,当按下 shift 和 a 时,将显示大写的 A。

event.type:按键事件的类型,’keydown’ 或 ‘keyup’。

检查按键是否按下

要检查当前是否按下了某个键,我们可以使用Key.isDown(key)函数。

下面的示例中,我们创建一个路径,并在用户拖动鼠标时向路径添加段。 当拖动时按下 ‘a’ 键,我们将最后添加的段移到鼠标的位置,而不是添加新的段。

  1. var path;
  2. function onMouseDown(event) {
  3. path = new Path();
  4. path.strokeColor = 'black';
  5. path.add(event.point);
  6. }
  7. function onMouseDrag(event) {
  8. if(Key.isDown('a')) {
  9. // 如果 'a' 键按下,
  10. // 移动最后一个段点到鼠标的位置:
  11. path.lastSegment.point = event.point;
  12. } else {
  13. // 如果键没被按下,在鼠标的位置添加一个段:
  14. path.add(event.point);
  15. }
  16. }

辅助按键

传递给鼠标事件处理程序(如 onMouseDown)的事件对象还包含有关按下哪些辅助按键的信息。 辅助按键是不直接产生字符的键:capsLock,command,control,option,shift。

event.modifiers 属性是一个对象,提供不同辅助按键的布尔值。 例如,要检查 shift 键是否关闭,您可以执行以下操作:

  1. function onMouseDrag(event) {
  2. if (event.modifiers.shift) {
  3. // 当 shift 键按下时执行某些操作
  4. }
  5. }

例如,如果我们想使用 shift 键,达到和上面示例脚本的相同效果:

  1. var path;
  2. function onMouseDown(event) {
  3. path = new Path();
  4. path.strokeColor = 'black';
  5. path.add(event.point, event.point);
  6. }
  7. function onMouseDrag(event) {
  8. if(event.modifiers.shift) {
  9. // 如果 'shift' 键按下,
  10. // 移动最后一个段点到鼠标的位置:
  11. path.lastSegment.point = event.point;
  12. } else {
  13. // 如果键没被按下,在鼠标的位置添加一个段:
  14. path.add(event.point);
  15. }
  16. }

享受按键的乐趣

以下示例会在运行时创建路径,并在按下 wasd 中的一个键时在对应按键方向上给路径添加段点。

单击下面的视图,使其获得键盘焦点并按下 wasd 中的一个键。

  1. //线的起始点
  2. var position = new Point(100, 100);
  3. // 当键按下时移动的距离:
  4. var step = 10;
  5. var path = new Path();
  6. path.strokeColor = 'black';
  7. path.add(position);
  8. function onKeyDown(event) {
  9. if(event.key == 'a') {
  10. position.x -= step;
  11. }
  12. if(event.key == 'd') {
  13. position.x += step;
  14. }
  15. if(event.key == 'w') {
  16. position.y -= step;
  17. }
  18. if(event.key == 's') {
  19. position.y += step;
  20. }
  21. path.add(position);
  22. }