Elm - 表单检查

Elm - Form inspection

下面的函数包括了collage的使用,只是把 Shape/Form 变成一个元素。

makeSlider : Element -> Form -> Element
makeSlider sliderShape sliderBarForm =
  let                                                                                                 
    sliderBar =
      --convert sliderBarForm from type Form to Element
      collage 1000 1000 [(move (0,0) sliderBarForm)]
  in 
    layers [sliderShape, sliderBar]

有没有办法像 Graphics.Element.sizeOf 一样提取表单的维度,以便 makeSlider 函数不需要知道 sliderBarForm 的显式维度?

或者是否存在 toElement 函数以便

collage 1000 1000 [(move (0,0) sliderBarForm)]

可以换成

toElement (move (0,0) sliderBarForm)?

我认为您无法轻松获得表单的尺寸。我想那是因为一个表单可以有很多种不同的东西(形状、路径等)。当我以后需要知道尺寸时,我会在创建表单时跟踪它们。

type alias MyForm =
  {   form : Form
    , width : Int
    , height : Int
  }

makeRectForm: Float -> Float -> MyForm
makeRectForm  w h = {form: (filled grey (rect w h)), width: (round w), height: (round h)}

那么在你的情况下你可以使用 MyFormcollage

makeSlider : Element -> MyForm -> Element
makeSlider sliderShape sliderBarMyForm =
  let                                                                                                 
    sliderBar =
      --convert sliderBarForm from type Form to Element
      collage sliderBarMyForm.width sliderBarMyForm.height [(move (0,0) sliderBarMyForm)]
  in 
    layers [sliderShape, sliderBar]