Adding Snow to your PowerApp

Adding Snow to your PowerApp

I added 20 snowflakes to mine, hence so many variables. I used a timer (Timer1) and a toggle with variable “snow” to turn it off and on. Tweak to your needs.

Find a snowflake image and upload as media to your app

Add to App.OnStart

Set(Snowflake01Y, -RandBetween(10, 50));
Set(Snowflake02Y, -RandBetween(10, 50));
Set(Snowflake03Y, -RandBetween(10, 50));
Set(Snowflake04Y, -RandBetween(10, 50));
Set(Snowflake05Y, -RandBetween(10, 50));
Set(Snowflake06Y, -RandBetween(10, 50));
Set(Snowflake07Y, -RandBetween(10, 50));
Set(Snowflake08Y, -RandBetween(10, 50));
Set(Snowflake09Y, -RandBetween(10, 50));
Set(Snowflake10Y, -RandBetween(10, 50));
Set(Snowflake11Y, -RandBetween(10, 50));
Set(Snowflake12Y, -RandBetween(10, 50));
Set(Snowflake13Y, -RandBetween(10, 50));
Set(Snowflake14Y, -RandBetween(10, 50));
Set(Snowflake15Y, -RandBetween(10, 50));
Set(Snowflake16Y, -RandBetween(10, 50));
Set(Snowflake17Y, -RandBetween(10, 50));
Set(Snowflake18Y, -RandBetween(10, 50));
Set(Snowflake19Y, -RandBetween(10, 50));
Set(Snowflake20Y, -RandBetween(10, 50));
Set(Snowflake01Speed, RandBetween(1, 5));
Set(Snowflake02Speed, RandBetween(1, 5));
Set(Snowflake03Speed, RandBetween(1, 5));
Set(Snowflake04Speed, RandBetween(1, 5));
Set(Snowflake05Speed, RandBetween(1, 5));
Set(Snowflake06Speed, RandBetween(1, 5));
Set(Snowflake07Speed, RandBetween(1, 5));
Set(Snowflake08Speed, RandBetween(1, 5));
Set(Snowflake09Speed, RandBetween(1, 5));
Set(Snowflake10Speed, RandBetween(1, 5));
Set(Snowflake11Speed, RandBetween(1, 5));
Set(Snowflake12Speed, RandBetween(1, 5));
Set(Snowflake13Speed, RandBetween(1, 5));
Set(Snowflake14Speed, RandBetween(1, 5));
Set(Snowflake15Speed, RandBetween(1, 5));
Set(Snowflake16Speed, RandBetween(1, 5));
Set(Snowflake17Speed, RandBetween(1, 5));
Set(Snowflake18Speed, RandBetween(1, 5));
Set(Snowflake19Speed, RandBetween(1, 5));
Set(Snowflake20Speed, RandBetween(1, 5));
Set(Snowflake01X, RandBetween(0,App.Width));
Set(Snowflake02X, RandBetween(0,App.Width));
Set(Snowflake03X, RandBetween(0,App.Width));
Set(Snowflake04X, RandBetween(0,App.Width));
Set(Snowflake05X, RandBetween(0,App.Width));
Set(Snowflake06X, RandBetween(0,App.Width));
Set(Snowflake07X, RandBetween(0,App.Width));
Set(Snowflake08X, RandBetween(0,App.Width));
Set(Snowflake09X, RandBetween(0,App.Width));
Set(Snowflake10X, RandBetween(0,App.Width));
Set(Snowflake11X, RandBetween(0,App.Width));
Set(Snowflake12X, RandBetween(0,App.Width));
Set(Snowflake13X, RandBetween(0,App.Width));
Set(Snowflake14X, RandBetween(0,App.Width));
Set(Snowflake15X, RandBetween(0,App.Width));
Set(Snowflake16X, RandBetween(0,App.Width));
Set(Snowflake17X, RandBetween(0,App.Width));
Set(Snowflake18X, RandBetween(0,App.Width));
Set(Snowflake19X, RandBetween(0,App.Width));
Set(Snowflake20X, RandBetween(0,App.Width));
Set(snow,true);
Set(Timer1Start, true);

Add Timer1

OnTimerEnd

Set the Y axis so that
– If it’s now offscreen, go back to the top and give it a new X axis too
– If not, move down a bit

- Timer1:
    Control: Timer
    Properties:
      OnTimerEnd: |-
        =Set(Snowflake01Y, If(Snowflake01Y >= App.Height,Set(Snowflake01X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_1.Height, Snowflake01Y + Snowflake01Speed));
        Set(Snowflake02Y, If(Snowflake02Y >= App.Height,Set(Snowflake02X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_2.Height, Snowflake02Y + Snowflake02Speed));
        Set(Snowflake03Y, If(Snowflake03Y >= App.Height,Set(Snowflake03X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_3.Height, Snowflake03Y + Snowflake03Speed));
        Set(Snowflake04Y, If(Snowflake04Y >= App.Height,Set(Snowflake04X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_4.Height, Snowflake04Y + Snowflake04Speed));
        Set(Snowflake05Y, If(Snowflake05Y >= App.Height,Set(Snowflake05X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_5.Height, Snowflake05Y + Snowflake05Speed));
        Set(Snowflake06Y, If(Snowflake06Y >= App.Height,Set(Snowflake06X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_6.Height, Snowflake06Y + Snowflake06Speed));
        Set(Snowflake07Y, If(Snowflake07Y >= App.Height,Set(Snowflake07X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_7.Height, Snowflake07Y + Snowflake07Speed));
        Set(Snowflake08Y, If(Snowflake08Y >= App.Height,Set(Snowflake08X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_8.Height, Snowflake08Y + Snowflake08Speed));
        Set(Snowflake09Y, If(Snowflake09Y >= App.Height,Set(Snowflake09X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_9.Height, Snowflake09Y + Snowflake09Speed));
        Set(Snowflake10Y, If(Snowflake10Y >= App.Height,Set(Snowflake10X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_10.Height, Snowflake10Y + Snowflake10Speed));
        Set(Snowflake11Y, If(Snowflake11Y >= App.Height,Set(Snowflake11X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_11.Height, Snowflake11Y + Snowflake11Speed));
        Set(Snowflake12Y, If(Snowflake12Y >= App.Height,Set(Snowflake12X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_12.Height, Snowflake12Y + Snowflake12Speed));
        Set(Snowflake13Y, If(Snowflake13Y >= App.Height,Set(Snowflake13X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_13.Height, Snowflake13Y + Snowflake13Speed));
        Set(Snowflake14Y, If(Snowflake14Y >= App.Height,Set(Snowflake14X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_14.Height, Snowflake14Y + Snowflake14Speed));
        Set(Snowflake15Y, If(Snowflake15Y >= App.Height,Set(Snowflake15X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_15.Height, Snowflake15Y + Snowflake15Speed));
        Set(Snowflake16Y, If(Snowflake16Y >= App.Height,Set(Snowflake16X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_16.Height, Snowflake16Y + Snowflake16Speed));
        Set(Snowflake17Y, If(Snowflake17Y >= App.Height,Set(Snowflake17X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_17.Height, Snowflake17Y + Snowflake17Speed));
        Set(Snowflake18Y, If(Snowflake18Y >= App.Height,Set(Snowflake18X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_18.Height, Snowflake18Y + Snowflake18Speed));
        Set(Snowflake19Y, If(Snowflake19Y >= App.Height,Set(Snowflake19X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_19.Height, Snowflake19Y + Snowflake19Speed));
        Set(Snowflake20Y, If(Snowflake20Y >= App.Height,Set(Snowflake20X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_20.Height, Snowflake20Y + Snowflake20Speed));
      Duration: =1
      Repeat: =true
      Start: =Timer1Start
      Visible: =false
      X: =10
      Y: =10

Toggle1

- Toggle1:
    Control: Classic/Toggle
    Properties:
      OnChange: =
      OnCheck: =Set(snow,true);Set(Timer1Start, true);
      OnUncheck: =Set(snow,false);Set(Timer1Start, false);
      Default: =true
      FalseText: ="No Snow"
      TrueText: ="Yay Snow"
      Size: =10
      Visible: =themeToggle

Snowflake1_1

- Snowflake1_1:
    Control: Image
    Properties:
      Image: =snowflake
      Height: =RandBetween(20,100)
      Visible: =snow
      X: =Snowflake01X
      Y: =Snowflake01Y

Repeat this for all your snowflakes, changing the variables for X and Y as you go

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *