Tutorial: Transitions

Transitions

Some element properties are transitionable. This means, that when changing their value, the property will transition smoothly interpolated to the new value.

The ~Transition Property

For each transitionable property of an element, there is another property with the name of that property suffixed by Transition for describing the desired transition.

By default, the ~Transition property has the value null, which means that the property changes its value abruptly without transitioning.

Custom properties are always transitionable if they have a numeric value assigned at declaration time.

The NumberAnimation Element

The element NumberAnimation is used for describing transitions by assigning it to the ~Transition property.

Document {

    MouseBox {
        width: 100
        height: 100
        color: "green"

        widthTransition: NumberAnimation { }

        onClick: () => { width = width > 100 ? 100 : 200; }
    }

}

Duration

The duration property specifies how long the transition will take to complete in milliseconds. By default, this is 300 ms.

Document {

    MouseBox {
        width: 100
        height: 100
        color: "green"

        widthTransition: NumberAnimation { duration: 50 }

        onClick: () => { width = width > 100 ? 100 : 200; }
    }

}

Easing Curves

The easing property specifies the type of easing curve used for interpolating the transition. By default, this is InOutQuad.

Valid values for easing are:

  • Linear
  • InSine
  • OutSine
  • InOutSine
  • InQuad
  • OutQuad
  • InOutQuad
  • InCubic
  • OutCubic
  • InOutCubic
  • InQuart
  • OutQuart
  • InOutQuart
  • InQuint
  • OutQuint
  • InOutQuint
  • InExpo
  • OutExpo
  • InOutExpo
  • InCirc
  • OutCirc
  • InOutCirc
  • InBack
  • OutBack
  • InOutBack
  • InElastic
  • OutElastic
  • InOutElastic
  • InBounce
  • OutBounce
  • InOutBounce

You can find illustrations of the various curves at https://easings.net.

Document {

    MouseBox {
        width: 100
        height: 100
        color: "green"

        widthTransition: NumberAnimation { duration: 500; easing: "OutBounce" }

        onClick: () => { width = width > 100 ? 100 : 200; }
    }

}