Elm检查是否按了ctrl键单击

Elm检查是否按了ctrl键单击,elm,Elm,使用elm html,如何检查单击时是否按下了ctrl键 “control key down”(控制键关闭)是否是我需要在其他地方保持的状态,可能是使用键盘模块?如果是这样的话,这将如何适应elm html 我根据一个著名的elm示例改编了以下代码: import Keyboard import Html exposing (..) import Html.Attributes exposing (style) import Html.Events exposing (onClick) impo

使用elm html,如何检查单击时是否按下了ctrl键

“control key down”(控制键关闭)是否是我需要在其他地方保持的状态,可能是使用键盘模块?如果是这样的话,这将如何适应elm html

我根据一个著名的elm示例改编了以下代码:

import Keyboard
import Html exposing (..)
import Html.Attributes exposing (style)
import Html.Events exposing (onClick)
import Signal exposing(Signal, Mailbox)


type alias Model =
  { count: Int
  , ctrl : Bool
}

initialModel : Model
initialModel = { count = 0, ctrl = False}

type Action = Increment | Decrement | NoOp

update : Action -> Model -> Model
update action model =
  case action of
    Increment ->
      { model | count = model.count + 1 }
    Decrement ->
      { model | count = model.count - 1 }
    NoOp ->
      model


view : Signal.Address Action -> Model -> Html
view address model =
  div []
    [ button [ onClick address Decrement ] [ text "-" ]
    , div [] [ text (toString model) ]
    , button [ onClick address Increment ] [ text "+" ]
    ]


actions : Mailbox Action
actions =
  Signal.mailbox NoOp

model : Signal Model
model =
  Signal.foldp update initialModel actions.signal -- Keyboard.ctrl ?

main =
  Signal.map (view actions.address) model

如何更新模型“ctrl”字段的值?

您首先需要一个能够设置是否按下ctrl的操作:

type Action=Increment | decreation | SetCtrl Bool | NoOp
update函数中的case语句需要处理该新操作:

SetCtrl-bool->{model | ctrl=bool}
现在,您需要一个端口,该端口可以将
键盘.ctrl
布尔值映射到一个任务,该任务通过新操作发送信号:

port-ctrlToAction:Signal(Task.Task-Effects.Never())
端口ctrlToAction=

我记得,在elm-0.16中删除了Signal.map(Signal.send actions.address信号