我有一个SPA写的榆树和风格与CSS.当视图更改时,将调用不同的渲染函数来渲染新视图.这也将停止呈现"旧"视图.

下一个要求是使视图更改平滑.我想这样做如下:

  • "旧"视图必须滑出到左边并淡出(即不透明度从1到0)
  • "新"视图必须从右侧滑入并淡出(即不透明度从0到1)
  • 当"旧"滑到屏幕外时,完全停止渲染该视图.

由于这些要求,浏览器应该同时呈现2个视图(旧视图和新视图).这就是我挣扎的地方.在新视图中添加一个过渡(使用CSS)并不困难.然而,将CSS添加到"旧"视图并不真正起作用,因为该视图将停止呈现.

如何在两个视图之间添加一个很好的过渡,其中两个视图将被渲染为彼此相邻短时间,并且都是从右向左滑动,视图的不透明度发生变化?

推荐答案

这在大多数基于VDom的框架中通常是相当困难的问题.

您需要在一段时间内同时渲染旧视图和新视图.要做到这一点,您还需要存储旧模型的快照.

你可以创建一个包装模块,看起来像这样:


type Animated model
    = NotAnimating model 
    | Animating String model model


view : (model -> Html msg) -> Animated model -> Html msg
view viewFn model =
   case model of 
       NotAnimating m -> viewFn m
       Animating transitionType old new ->
          Html.div [class "animated-transition", class transitionType]
             [ Html.div [class "transition-out", Html.Attribute.attribute "inert" "inert" ] [ viewFn old ]
             , Html.div [ class "transition-in" ] [ viewFn new ]
             ]

注意inert属性.这将使旧视图不接受用户事件/焦点.

https://github.com/elm/browser/issues/131.

Css相关问答推荐

要创建其按钮垂直对齐而不是水平对齐的v-bTN-toggle

CSS动画与不正确的时间比率

如何提高数学输出的质量?

单独.css文件中的样式不适用于Angular 元件

当面板以Angular 上升时如何定位下拉面板

material 设计--Bootstrap输入域问题

使用SVG以竖排书写模式创建渐变文本时,文本显示异常

将CSS栅格行高设置为其余视口高度

为什么 CSS Calc() 函数只需要+或-运算符前后有空格

如何按列垂直对齐项目,但不在列内水平对齐

SCSS - Lighten/Darken 不编译?

在 dbc.Container 上方包含横幅 - Dash

当页面大小小于VH时,Tailwind CSS如何使页脚留在底部

将复选框对齐到中心

CSS 中的区域类似于 C# 区域?

firefox overflow-y 不能使用嵌套的 flexbox

在 CSS 或 JavaScript 中反转图像的 colored颜色

位置元素垂直固定,绝对水平

Bootstrap 4:导航内的多级下拉菜单

CSS3单向过渡?