1

我发现我需要一个元素来包含一些不是固定大小的文本(所采取的操作的日志),其中该元素的大小是固定的。做显而易见的事情会得到不良结果:

http://ikeran.org/images/overflow2.png

我正在使用的代码:

renderLog w h log =
  let rh = truncate ((toFloat h) * 0.2)
      contents = map (\m -> Text.text <| Text.height 12 <| Text.toText m) log
      d = flow down contents in
  size w rh d

我希望“大小”调用会切断该大小的内容。它没有。当您对 HTML 足够熟悉时,这不足为奇——默认overflow值为visible.

如果我使用 CSS,我可以简单地设置overflowhiddenorscroll并继续我的快乐方式。有没有推荐的使用 Elm 完成此任务的方法?

4

1 回答 1

1

我知道的唯一方法是相当低级的。您可以做的是将这些文本行放入日志中,直到用完您打算使用的空间。我从邮件列表中得到了这个想法

renderLog w h log =
  let contents = map (\m -> width w <| Text.text <| Text.height 12 <| Text.toText m) log
      heights = filter (\n -> n <= h) <| scanl1 (+) <| map heightOf contents
      d = flow down <| take (length heights) contents
  in height h d

你所做的是强制每段文本已经是正确的宽度。这确保了当您测量高度时,这将是它在日志中的高度。
然后您测量每个高度并找出高度之和何时大于给定参数h。仅将文本项记录到发生时将确保您的日志不会溢出。

这是一个运行示例:http ://share-elm.com/sprout/52da7873e4b06194fd2d4149

于 2014-01-18T12:56:15.667 回答