Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keyboard 如何将键盘按键链接到动作_Keyboard_Elm - Fatal编程技术网

Keyboard 如何将键盘按键链接到动作

Keyboard 如何将键盘按键链接到动作,keyboard,elm,Keyboard,Elm,我掌握了Elm的窍门,但我一直在为信号和键盘按键而挣扎。下面的代码是启动应用程序包的一个示例。当我按下空格键时,我希望计数器是递增的。在下面的例子中是如何做到这一点的 import Html exposing (div, button, text) import Html.Events exposing (onClick) import StartApp.Simple as StartApp main = StartApp.start { model = model, view = vi

我掌握了Elm的窍门,但我一直在为信号和键盘按键而挣扎。下面的代码是启动应用程序包的一个示例。当我按下空格键时,我希望计数器是递增的。在下面的例子中是如何做到这一点的

import Html exposing (div, button, text)
import Html.Events exposing (onClick)
import StartApp.Simple as StartApp


main =
  StartApp.start { model = model, view = view, update = update }


model = 0


view address model =
  div []
    [ button [ onClick address Decrement ] [ text "-" ]
    , div [] [ text (toString model) ]
    , button [ onClick address Increment ] [ text "+" ]
    ]


type Action = Increment | Decrement


update action model =
  case action of
    Increment -> model + 1
    Decrement -> model - 1 

您需要使用常规而不是StartApp.Simple,因为它提供了使用效果和任务的方法

操作
需要一个
NoOp
构造函数,以便在按键不是空格键时,视图保持不变

然后,您需要一个映射
键盘的函数。按
值可执行
操作
。以下是更新的代码:

导入Html(div、按钮、文本)
导入Html.Events(onClick)
进口StartApp
导入效果(从不)
导入任务
输入键盘
导入字符
应用程序=
开始
{init=init
,视图=视图
,update=update
,输入=[Signal.map spaceToInc Keyboard.press]
}
主要=
app.html
类型别名Model=Int
初始化=
(0,效果。无)
视图地址模型=
分区[]
[按钮[点击地址递减][文本“-”]
,div[]文本(toString模型)]
,按钮[onClick address Increment][text“+”]
]
类型动作
=增量
|减量
|努普
更新动作模型=
案例诉讼
NoOp->(模型,效果,无)
增量->(模型+1,效果。无)
减量->(型号-1,效果。无)
spaceToInc:Int->Action
空格键码=
的大小写(Char.fromCode keyCode)
''->增量
_->NoOp
端口任务:信号(Task.Task Never())
港口任务=
应用程序任务

我还有一个问题。如果我想在同时按下两个按钮的情况下增加,我该如何做呢。我无法使用
键盘。再按
,因为您无法检查它们是否同时按下。请查看。该信号为您提供当前已按下的所有键的
设置。如果你试图确定一个按键而不是一个连续按下的键,你可能会遇到问题,但是当其中一个键松开时,你会得到一个新的信号,也许这就是你想要的。