How to Recreate Apple’s Parallax Effect with ProtoPie
Learn how to master the parallax effect and recreate an Apple Vision Pro inspired landing page prototype.
![Khonok Lee](https://cdn.sanity.io/images/qyzm5ged/blog/21acfd2875a95fd3ecc6d4e33253ff2abf75e0e5-120x120.png/Khonok-ProtoPie-Customer-Learning-Designer.png)
![apple vision pro parallax effect clone](https://cdn.sanity.io/images/qyzm5ged/blog/11dc5f2a5c3ca50d2047e5a0d2c19f71e04624a5-2138x1200.jpg/Thumbnail-v2-(Apple-Website-Clone).jpg)
Are you ready to learn about parallax scrolling and create an Apple Vision Pro landing page clone? Let's dive right in.
Overview
- What's parallax scrolling?
- Recreating Apple Vision Pro's landing page with ProtoPie
- What you’ll need
- Tips and tricks
- Parallax scrolling made easy with ProtoPie
- Learn web design with ProtoPie School
What is parallax scrolling?
Parallax scrolling has been a game changer in web design since its inception in 2011, offering a dynamic and immersive user experience. With time, it has become a foundational element of contemporary web design.
The technique creates an illusion of depth by making the background move slower than the foreground elements as users scroll through a webpage. This not only enhances the visual appeal but also improves user engagement. It also creates a compelling narrative that unfolds as users scroll through the vast information you want to share, encouraging users to explore further.
Recreating Apple Vision Pro's landing page with ProtoPie
This article delves into web design, offering actionable tips and tricks. We’ll guide you in replicating the state-of-the-art Apple Vision Pro landing page design using ProtoPie. Given the vastness of the Apple website, our focus will be honed in on fundamental techniques to replicate its essence.
What you’ll need
Before we begin, take a moment to gather the necessary assets to prepare yourself for this creative expedition.
Tips and tricks for a seamless scrolling experience
With ProtoPie in your toolkit, getting a handle on the subtleties of parallax design is about to get a whole lot easier compared to wrangling with other design tools. We’ll lay out some handy tips and tricks to set you up for web design mastery. Before you know it, you'll be crafting a seamless, eye-catching scrolling experience on your web projects like a pro!
Let’s get started.
Craft the hero section with scroll animations
![Apple Vision Pro scroll animation.](https://cdn.sanity.io/images/qyzm5ged/blog/79a330b665c036c3b81173fde5209dd89be14450-1200x809.gif/Hero-Section.gif)
The hero section is your website's forefront, and here we have a captivating video that covers nearly the entire screen. As you begin to scroll, some exciting transitions take place:
- The navigation bar partially hides itself
- The Apple Vision Pro component gracefully fades away.
- The hero video smoothly starts playing.
Open our Starting Pie. Let’s pinpoint the "Hero" scene. This will serve as our designated area for crafting these captivating hero animations.
Did you notice that as you scroll on the Vision Pro landing page, the elements subtly transform in appearance without significant vertical movement? If you observe the scroll indicator in your browser, the progress bar does indeed shift, indicating the depth of the scroll.
Our challenge is to replicate this effect while keeping the elements anchored in place within ProtoPie. We'll walk you through a technique involving the creation of a dummy scroll element to regulate the scroll depth. Simultaneously, we'll employ scroll distance to precisely dictate how we want the elements to transform based on the scroll progress.
1. Let’s create a scroll container called “Dummy Scroll”. The scroll container should have the same height as your screen. In terms of its width, you can pick whatever you like. For the scroll direction, let’s use vertical.
![Apple Vision Pro Scrolling Effect.](https://cdn.sanity.io/images/qyzm5ged/blog/2a8d97256f1f850fec827dc5491d34200930cde5-1690x1186.png/Untitled.png)
2. Inside the “Dummy Scroll” container, let’s draw a rectangle called “Depth”. The rectangle has the same width as the “Dummy Scroll” container. For the height of this rectangle, let’s use 2000 pixels.
![Add depth indicator for dummy scroll.](https://cdn.sanity.io/images/qyzm5ged/blog/a05425b848ad6b030f487fe9f6513f190b58bacb-1200x778.jpg/add-depth-indicator-for-dummy-scroll.jpg)
3. Now, we’d prefer to move the “Dummy Scroll” container outside of the scene since it shouldn’t be a visible element.
4. Next, turn on its touch area on its right side, and have this touch area cover the entire screen.
![Touch area.](https://cdn.sanity.io/images/qyzm5ged/blog/8bd63fdf440b705b630fc2faeab1c02d50859421-1690x1188.png/Untitled.png)
5. Lastly, for our own convenience to check the scroll distance in real-time, let’s create a variable for it.
- Create a variable “For This Scene”
- Let’s call it “scrollDistance”
- Inside the variable, use a formula directly and write in
`Dummy Scroll`.scrollOffset
- Turn on the debug mode by clicking the ladybug icon in the variable panel
6. Let’s preview. Now when we scroll the website, even if nothing is visually changing, we can see the variable is getting its value. This is our scroll distance and we will use this value to make our elements change.
![Scroll distance preview.](https://cdn.sanity.io/images/qyzm5ged/blog/85b6762495273a38b112d2284249877ebdb01b39-1200x809.gif/scroll-distance-preview.gif)
Now let’s animate a few things when we start to scroll the website
- Add a Range trigger to the “Dummy Scroll” container’s Scroll property.
- When we start to scroll, the scroll distance should no longer be 0. So for the Range let’s use
Scroll of Dummy Scroll ≥ 1
- Now, our objectives are to make the navigation bar move upwards, hide the logo, and kickstart the video playback.
- Add a Move response to the “Nav” container, and move it to Y = -44
- Add an Opacity response to the “Hero copy” container and turn it down to 0.
- Add a Playback response to the “Hero Video” and make it Play.
![Configure range trigger.](https://cdn.sanity.io/images/qyzm5ged/blog/8ee45ee5ae57385f424c43c8b8f127eae9dfc6a3-1200x398.jpg/configure-range-trigger-for-start-animations.jpg)
When we scroll the website back to the top, the entire navigation bar will be revealed.
- Add a Range trigger to the “Dummy Scroll” container’s Scroll property. And for the Range, let’s use
Scroll of Dummy Scroll = 0
- To make the navigation bar reveal, simply add a Reset response to the “Nav” container.
![Reset response.](https://cdn.sanity.io/images/qyzm5ged/blog/fc61b66bbf3c7cc20c92ca792334e87f6f1d4baf-1200x262.jpg/configure-range-trigger-navigation-bar-reset.jpg)
As we continue scrolling further down, the video will gradually reduce in size and slightly dim.
1. Add a Chain trigger to the “Dummy Scroll” container’s Scroll property.
![Add a chain trigger.](https://cdn.sanity.io/images/qyzm5ged/blog/a6e73e1253067b57d2e7c09eab06064e1a18680e-1200x473.jpg/add-chain-dummy-scroll.jpg)
2. Then add a Scale response to the “Hero Video”.
- When the scroll distance ranges from 0 to 976 pixels, the video's scale factor will smoothly transition from 100% to 90%
![Scale response.](https://cdn.sanity.io/images/qyzm5ged/blog/af46093a344ed1997e270d96d77004f1bd87abc9-1200x1064.jpg/scale-video-on-scroll.jpg)
3. Let’s add an Opacity response to the “Hero Video”
- When the scroll distance ranges from 512 to 976 pixels, we'll gradually adjust the video's opacity from 100 to 30
![Opacity response.](https://cdn.sanity.io/images/qyzm5ged/blog/5e49d1276cdbdcaf475cbcb133a5de8e0ba054b5-1200x929.jpg/fade-video-on-scroll.jpg)
Great job! Now you’ve learned how to use the dummy scroll technique to achieve the Apple Vision hero section. We have a Quick Start video lesson for you to practice this even more. Check it out on ProtoPie School.
Enhance engagement with video slideshows
![Video slideshow.](https://cdn.sanity.io/images/qyzm5ged/blog/9083665158c9a24c260c549fa1ac9730ba5cfde1-1200x809.gif/video-slideshow-preview.gif)
Next, let's delve into the realm of video slideshows, situated just below our captivating hero section.
Within this section, a series of videos elegantly present themselves one after another as we scroll down. Accompanying each video is a brief one-liner that gracefully appears and moves in sync with our scrolling actions.
In our starting pie, let’s jump to the second scene called “Video Slideshows”. Here, we have a few things prepared for you.
- The “Dummy Scroll” container — Same as what we discussed in the first part of this article, this will be your scroll event control.
- A variable called “scrollDistance” — This displays the real-time scroll distance.
We also have a few visual assets prepared.
- The “Text Area” container — Inside it, you can find four different text layers, which we’ll make show up on each slide
- The “Video” container — It houses all the videos we’re going to use.
Let’s focus on the first slide.
1. Add a Chain trigger to the “Dummy Scroll” container’s Scroll property.
![Chain trigger.](https://cdn.sanity.io/images/qyzm5ged/blog/a6e73e1253067b57d2e7c09eab06064e1a18680e-1200x473.jpg/add-chain-dummy-scroll.jpg)
- Apply a Move response to the “Text 1” layer, which represents the one-liner on the first slide. Specify that when the scroll distance spans from 0 to 976 pixels, “Text 1” will smoothly move from a Y position of 767 to 0.
![Move response.](https://cdn.sanity.io/images/qyzm5ged/blog/444756c4a307b856de24b8ec452b49a755a51810-1200x933.jpg/configure-text-layer-move-on-scroll.jpg)
- Add an Opacity response to the “Text 1” layer, and incorporate the following detailed animations:
- When the scroll distance spans from 0 to 50 pixels, transition the text's opacity from 0 to 100, ensuring the text layer becomes visible.
- During the range of 50 to 972 pixels, maintain the text's opacity at 100, ensuring it remains visible on the screen.
- As we reach the range of 922 to 972 pixels, gradually adjust the text's opacity from 100 to 0, allowing the text layer to gracefully fade away.
![Text opacity.](https://cdn.sanity.io/images/qyzm5ged/blog/68a189f922765030ae0bf8a9c577d53e67f7ea7f-1200x1544.jpg/configure-text-layer-oppacity-on-scroll.jpg)
- Add an Opacity response to the “Video Wrapper 1” container, and configure the following ranges.
- When the scroll distance ranges from 0 to 871 pixels, ensure the Video Wrapper maintains an opacity of 80.
- As the scroll distance ranges from 871 to 972 pixels, smoothly transition the Video Wrapper's opacity from 100 to 0, allowing it to gracefully fade away.
![Video wrapper opacity.](https://cdn.sanity.io/images/qyzm5ged/blog/adb7aca373af15c25c4840975a24f7030a52ac64-1200x1227.jpg/configure-video-wrapper-oppacity-on-scroll.jpg)
2. Let’s preview the animation for the first slide.
![Animation preview.](https://cdn.sanity.io/images/qyzm5ged/blog/e52c3c313f4628a319eb57a33aafbf4aa80012f0-1200x809.gif/first-slide-preview.gif)
Now, let's transition to the second slide. The animation remains largely identical, except for being triggered by a different scroll distance. We can streamline our work by duplicating the interaction from the first slide and then making the necessary modifications.
1. Let’s duplicate the three responses we have so far
2. Then we change the linked object. For example:
- If the original responses were linked to "Text 1", update it to "Text 2".
- If the original responses were associated with "Video Wrapper 1", change it to "Video Wrapper 2".
3. Leverage ProtoPie's timeline feature for efficiency. Select all three of the newly created responses and shift them to the right, aligning their starting points precisely with the endpoint of our initial interactions.
![Shift responses to the right.](https://cdn.sanity.io/images/qyzm5ged/blog/c81d3002aac55cad5f5a7fc2eb1e40c05d1b27f1-2258x460.png/Untitled.png)
4. Let’s preview.
![Second slide preview.](https://cdn.sanity.io/images/qyzm5ged/blog/e0ae6a67dbe01b756654dca6c8dc783d16d66b9a-1200x809.gif/issue-in-second-slide-preview.gif)
Everything functions flawlessly until we attempt to scroll from slide 2 back to slide 1. The second video fails to reset its opacity to 0.
1. For the Opacity response on "Video Wrapper 2", we need to make a small adjustment.
- The current range looks like this — When the scroll distance ranges from 972 to 1894 pixels, the Video Wrapper maintains an opacity of 80.
- Let’s change this into
- When the scroll distance ranges from 972 to 1022 pixels, adjust the Video Wrapper’s opacity from 0 to 100
- When the scroll distance ranges from 1022 to 1894 pixels, ensure the Video Wrapper maintains an opacity of 80.
![Wrapper Opacity.](https://cdn.sanity.io/images/qyzm5ged/blog/1c7216bc0e8a5b0c8a438ce93589b0af90005f22-1200x1535.jpg/modify-video-wrapper-oppacity-on-scroll.jpg)
2. With this adjustment, we're now set to effortlessly apply these interactions to subsequent slides by duplicating the responses, assigning them to new objects, and appropriately adjusting the timeline.
Lastly, we need to manage video playback or reset based on the scroll distance. This can be easily achieved using the Range trigger. Given the length of this article, we won't delve into the specifics. The picture below is a reference to guide you in setting up the ranges accurately.
![Range trigger.](https://cdn.sanity.io/images/qyzm5ged/blog/bfb790bdc8570f57015b7a8af4a6e38ee8358523-2706x860.png/Untitled.png)
If you're new to the Range trigger, we have a dedicated lesson on ProtoPie School that provides a step-by-step tutorial on how to play or pause based on a scroll event. Feel free to explore this resource for comprehensive guidance and a deeper understanding.
And you may wonder how to make a horizontally scrollable slideshow. We’ve got you covered. Check out this web design Quick Start lesson on ProtoPie School!
Add an immersive touch with scroll to playback
We've observed that Apple's website often incorporates numerous video and image assets, cleverly triggered as users scroll through the website. It not only enhances the visual appeal of the website but also engages users effectively. It allows for a compelling storytelling approach, enabling users to follow the narrative and absorb important information in an engaging and interactive manner.
In our last example, we’ll focus on the section on the Vision Pro landing page which uses this technique.
![Scroll to playback.](https://cdn.sanity.io/images/qyzm5ged/blog/466fa73459e833b2999e22680b142e6f77bbc0c9-1200x809.gif/scroll-to-playback-preview.gif)
In our starting pie, let’s navigate to the last scene called ”Scroll to Playback”.
Just like in our earlier examples, I've set up some foundational elements to kickstart this process—such as the "Dummy Scroll" container to manage scroll events and "scrollDistance" to monitor real-time scroll values. Additionally, I've arranged a set of interactions that utilize Chain triggers to smoothly transition elements as we scroll through the website.
The only thing we need to do here is to make the video play as we scroll. Let's dive into achieving this functionality.
1. First, add a Chain trigger to the "Dummy Scroll" container and pick its scroll property.
![Chain trigger.](https://cdn.sanity.io/images/qyzm5ged/blog/a6e73e1253067b57d2e7c09eab06064e1a18680e-1200x473.jpg/add-chain-dummy-scroll.jpg)
2. Then add a Playback response to the “Video” layer. For the action, let’s choose “Seek”. And then we’re going to use a formula in it: `Video`.totalTime/1650*(`Dummy Scroll`.scrollOffset-798)
![Playback response.](https://cdn.sanity.io/images/qyzm5ged/blog/933fd48c3376733a96b07c76413749951acd032a-1226x486.png/Untitled.png)
`Video`.totalTime
— It retrieves the total duration of our video asset.1650
— This value is customizable and represents the span of scroll depth linked to our desired video behavior.`Dummy Scroll.scrollOffset
It retrieves the total scroll distance.798
— This value is also adjustable and marks the starting point of our scroll-to-playback interaction. Specifically, it means the scroll-to-playback interaction is only triggered when we scroll for a distance of 798 from the top of our page. And why is that? Simply because we have other designs before this section.
Parallax scrolling made easy with ProtoPie
As we conclude this tutorial, we've explored key techniques to emulate the captivating user experience found on the Apple website. While replicating the full scope of Apple's website is a vast endeavor, the foundational methods we've discussed serve as a strong starting point.
Feel free to expand upon these techniques, experiment with different scroll triggers, explore additional interactions, and fine-tune the behaviors to suit your specific project.
Learn web design with ProtoPie School
And there's more to discover! For in-depth insights and further exploration of web design techniques, be sure to check out our comprehensive web design series on ProtoPie School. This series delves into a multitude of topics, providing valuable tips, tutorials, and inspiration to elevate your web design skills.
Stay engaged, keep learning, and let your creativity flourish as you embark on your web design journey. Happy prototyping!