mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
/**
|
|
* @ngdoc service
|
|
* @name $ionicBackdrop
|
|
* @module ionic
|
|
* @description
|
|
* Shows and hides a backdrop over the UI. Appears behind popups, loading,
|
|
* and other overlays.
|
|
*
|
|
* Often, multiple UI components require a backdrop, but only one backdrop is
|
|
* ever needed in the DOM at a time.
|
|
*
|
|
* Therefore, each component that requires the backdrop to be shown calls
|
|
* `$ionicBackdrop.retain()` when it wants the backdrop, then `$ionicBackdrop.release()`
|
|
* when it is done with the backdrop.
|
|
*
|
|
* For each time `retain` is called, the backdrop will be shown until `release` is called.
|
|
*
|
|
* For example, if `retain` is called three times, the backdrop will be shown until `release`
|
|
* is called three times.
|
|
*
|
|
* @usage
|
|
*
|
|
* ```js
|
|
* function MyController($scope, $ionicBackdrop, $timeout) {
|
|
* //Show a backdrop for one second
|
|
* $scope.action = function() {
|
|
* $ionicBackdrop.retain();
|
|
* $timeout(function() {
|
|
* $ionicBackdrop.release();
|
|
* }, 1000);
|
|
* };
|
|
* }
|
|
* ```
|
|
*/
|
|
IonicModule
|
|
.factory('$ionicBackdrop', [
|
|
'$document',
|
|
function($document) {
|
|
|
|
var el = angular.element('<div class="backdrop">');
|
|
var backdropHolds = 0;
|
|
|
|
$document[0].body.appendChild(el[0]);
|
|
|
|
return {
|
|
/**
|
|
* @ngdoc method
|
|
* @name $ionicBackdrop#retain
|
|
* @description Retains the backdrop.
|
|
*/
|
|
retain: retain,
|
|
/**
|
|
* @ngdoc method
|
|
* @name $ionicBackdrop#retain
|
|
* @description
|
|
* Releases the backdrop.
|
|
*/
|
|
release: release,
|
|
// exposed for testing
|
|
_element: el
|
|
};
|
|
|
|
function retain() {
|
|
if ( (++backdropHolds) === 1 ) {
|
|
el.addClass('visible');
|
|
ionic.requestAnimationFrame(function() {
|
|
backdropHolds && el.addClass('active');
|
|
});
|
|
}
|
|
}
|
|
function release() {
|
|
if ( (--backdropHolds) === 0 ) {
|
|
el.removeClass('active');
|
|
setTimeout(function() {
|
|
!backdropHolds && el.removeClass('visible');
|
|
}, 100);
|
|
}
|
|
}
|
|
}]);
|