Page Visibility
Page visibility can detect whether the Web document is being shown on the screen. With it, you can design your application to only operate when its page is visible, both enhancing the user experience and reducing the resource usage on the device.
The main features of the Page Visibility API include the following:
-
Retrieving the page visibility status
You can use 2 properties to detect the visibility status of the page:
- The
hidden
property returns a boolean value indicating whether the page is visible. - The
visibilityState
property returns a DOMString type indicating whether the page is visible.
- The
-
Tracking changes in page visibility
You can use the
visibilitychange
event to be able to respond to changes in the page visibility status.For example, in a video player application, you can change the play status of the application based on the event: pause the playback when the page becomes hidden, and continue playing when the page becomes visible again.
NoteTizen supports the WebKit-based Page Visibility API. When using the Page Visibility API, you must include the webkit prefix.
Retrieve the page visibility status
To optimize the performance of your application, you must learn to retrieve the page visibility status:
-
Retrieve the page visibility status with the
hidden
property:<script> var logText = document.querySelector('.log'); function pageVisibilityHandler() { logText.innerHTML += '<p>Hidden: <span>' + document.webkitHidden; + '</span></p>';
The
hidden
property returnstrue
if the document in the top-level browsing context (root window in the browser’s viewport) [HTML5] is not visible at all. If the document is at least partially visible, the property returnsfalse
. -
Retrieve the page visibility status with the
visibilityState
property:logText.innerHTML += '<p>VisibilityState: <span>' + document.webkitVisibilityState; + '</span></p>'; } </script>
The
visibilityState
property returns one of the following DOMString types:hidden
: Document cannot be seen at allvisible
: Document can be at least partly seenprerender
: Document is loaded, but cannot be seen on the screenunloaded
: Document is not loaded
Tizen does not currently support the
prerender
andunloaded
types.
NoteSince Tizen supports the WebKit-based page visibility, you must include the webkit prefix in the attributes.
Figure: Page visibility (in mobile applications only)
Source code
For the complete source code related to this use case, see the following file:
Receive notifications on visibility status changes
To optimize the performance of your application, you must learn to track changes in the page visibility status, and respond to them appropriately:
-
Define the elements used to play video on the screen:
<!--video control--> <div class="media"> <video id="video" src="video_sample.mp4" width="360" height="220"></video> <div> <!--video control buttons--> <button id="v-play" type="button">play</button> <button id="v-pause" type="button" disabled >pause</button> </div> </div>
-
Add event listeners to play and pause the video based on the button clicks:
<script> var play_button = document.getElementById('v-play'); var pause_button = document.getElementById('v-pause'); var video = document.getElementById('video'); play_button.addEventListener('click', function() { video.play(); /* Play video */ }, false); pause_button.addEventListener('click', function() { video.pause(); /* Pause video */ }, false); /* Enable and disable buttons based on the playback status */ video.addEventListener('play', function() { play_button.disabled = true; /* Disable play button */ pause_button.disabled = false; /* Enable pause button */ }, false); video.addEventListener('pause', function() { play_button.disabled = false; /* Enable play button */ pause_button.disabled = true; /* Disable pause button */ }, false); </script>
-
Add an event listener to track the page visibility status changes. When the status changes and the
visibilityChange
event is triggered, use thehidden
property to check whether the page is hidden or visible, and to play or pause the video accordingly:<script> /* Add visibility status event listener */ document.addEventListener('webkitvisibilitychange', pageVisibilityHandler, false); /* When the visibility status changes */ function pageVisibilityHandler() { /* Check whether the page is hidden */ if (!(document.webkitHidden)) { video.play(); /* Play video */ } else { video.pause(); /* Pause video */ } } </script>
If the video page becomes hidden with a tab screen transition, the playback is paused. When the video page is visible again, the playback resumes.
Figure: Video player (in mobile applications only)
Source code
For the complete source code related to this use case, see the following files:
Related information
- Dependencies
- Tizen 2.4 and Higher for Mobile
- Tizen 2.3.1 and Higher for Wearable
- Tizen 3.0 and Higher for TV