Power Apps has no marquee control, but a timer can drive a label's horizontal position. Use the timer's current Value in the label's X formula rather than repeatedly changing a variable. Keep the effect optional because continuous movement can distract users and create an accessibility problem.
Build a contained example
Add a horizontal container or a screen area that will hold the scrolling message. Insert:
- a label named
lblMessage; - a timer named
tmrMessage; - a button named
btnAnimation.
Set the label's Text to your message. Give it enough width to display the full sentence on one line.
Set the timer properties:
Duration = 10000
Repeat = true
AutoStart = false
AutoPause = true
Visible = false
Start = varAnimateMessage
Duration is measured in milliseconds. Ten thousand milliseconds is ten seconds. Use a longer duration for slower movement.
Set the label's X property:
Parent.Width -
(tmrMessage.Value / tmrMessage.Duration) *
(Parent.Width + Self.Width)
At the start, the label sits just beyond the right edge of its parent. As the timer advances, the formula moves it left. At the end, the label has moved beyond the left edge, and Repeat starts the cycle again.
If the parent does not clip overflowing children, place the label inside a container configured to hide overflow or reconsider whether the effect fits that layout.
Add a pause control
Set the button's Text:
If(varAnimateMessage, "Pause message", "Play message")
Set OnSelect:
Set(varAnimateMessage, !varAnimateMessage)
Set varAnimateMessage to false initially. This makes movement a deliberate user choice. If the message conveys important information, also present it as ordinary static text that does not disappear.
Why not use a 1 ms timer?
A timer duration of one millisecond does not promise one-millisecond visual updates. Rendering depends on the device, browser, app workload and platform scheduling. It also makes speed hard to control and can waste work.
Use a meaningful total duration and derive position from Timer.Value. The formula remains correct even when frames are not delivered at a perfectly uniform interval.
Accessibility checks
Microsoft's timer guidance allows hidden background timers for supporting behaviour. A scrolling message still needs human checks:
- Give users a way to pause movement.
- Do not use motion as the only way to communicate status.
- Keep contrast and text size readable.
- Test keyboard and screen-reader order.
- Avoid rapid, flashing or repeatedly disruptive content.
- Check the app on every supported device size.
A status banner that users must read is generally better as static text with a close button.
Failure and recovery
Timers run in Power Apps Studio only in Preview mode, so use Preview when testing. Check navigation away from and back to the screen because AutoPause and AutoStart affect what the user sees.
If the label jumps or vanishes, temporarily make the timer visible and add labels for tmrMessage.Value, Parent.Width and lblMessage.Width. Confirm that Duration is greater than zero and that the label is inside the intended parent. Remove diagnostics before publishing.
What this pattern is good for
Use it for a small optional visual detail, a demonstration of coordinate formulas or a non-essential ticker. Do not use it as a substitute for notifications, accessible status text or a proper gallery of records.
For help turning a visual experiment into a supportable canvas component, join the Power Apps Builders Space.
