A Pen by Justin Noel on CodePen.
Created
September 10, 2015 10:09
-
-
Save arup-b/0ba0ebfde60a116f8fed to your computer and use it in GitHub Desktop.
Ionic : Slidebox with Dynamic Slides
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> | |
<title>Ionic App</title> | |
<link href="http://code.ionicframework.com/1.0.0-beta.11/css/ionic.css" rel="stylesheet"> | |
<script src="http://code.ionicframework.com/1.0.0-beta.11/js/ionic.bundle.js"></script> | |
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.mobile.js"></script> | |
</head> | |
<body ng-app="ionicApp" animation="slide-left-right-ios7"> | |
<ion-nav-bar class="nav-title-slide-ios7 bar-light"> | |
<ion-nav-back-button class="button-icon ion-arrow-left-c"> | |
</ion-nav-back-button> | |
</ion-nav-bar> | |
<ion-nav-view></ion-nav-view> | |
<script id="firstSlide.html" type="text/ng-template"> | |
<h1>First Slide!</h1> | |
<button class="button button-assertive" ng-click="showBonus()" ng-if="data.initialInstruction">Show Bonus Slide</button> | |
<p class="padding" ng-if="data.initialInstruction">Notice at first there are only 3 slides</p> | |
<p class="padding" ng-if="data.secondInstruction">Now there are 4 slides</p> | |
</script> | |
<script id="secondSlide.html" type="text/ng-template"> | |
<h1>Second Slide!</h1> | |
</script> | |
<script id="bonusSlide.html" type="text/ng-template"> | |
<h1>Bonus Slide!</h1> | |
</script> | |
<script id="thirdSlide.html" type="text/ng-template"> | |
<h1>Third Slide!</h1> | |
</script> | |
<script id="intro.html" type="text/ng-template"> | |
<ion-view title="Dynamic Slides"> | |
<ion-nav-buttons side="left"> | |
<button class="button button-positive button-clear no-animation" | |
ng-click="previous()" ng-if="data.slideIndex > 0"> | |
Previous Slide | |
</button> | |
</ion-nav-buttons> | |
<ion-nav-buttons side="right"> | |
<button class="button button-positive button-clear no-animation" | |
ng-click="next()" ng-if="data.slideIndex < data.numViewableSlides - 1"> | |
Next | |
</button> | |
</ion-nav-buttons> | |
<ion-slide-box on-slide-changed="slideChanged(index)"> | |
<ion-slide ng-repeat="slide in data.slides | filter:{viewable : true}"> | |
<div ng-include src="slide.template"></div> | |
</ion-slide> | |
</ion-slide-box> | |
</ion-view> | |
</script> | |
<script id="main.html" type="text/ng-template"> | |
<ion-view hide-back-button="true" title="Awesome"> | |
<ion-content padding="true"> | |
<h1>Main app here</h1> | |
<button class="button" ng-click="toIntro()">Do Tutorial Again</button> | |
</ion-content> | |
</ion-view> | |
</script> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
angular.module('ionicApp', ['ionic']) | |
.config(function($stateProvider, $urlRouterProvider) { | |
$stateProvider | |
.state('intro', { | |
url: '/', | |
templateUrl: 'intro.html', | |
controller: 'IntroCtrl' | |
}); | |
$urlRouterProvider.otherwise("/"); | |
}) | |
.controller('IntroCtrl', function($scope, $state, $ionicSlideBoxDelegate) { | |
$scope.data = { | |
numViewableSlides : 0, | |
slideIndex : 0, | |
initialInstruction : true, | |
secondInstruction : false, | |
slides : [ | |
{ | |
'template' : 'firstSlide.html', | |
'viewable' : true | |
}, | |
{ | |
'template' : 'bonusSlide.html', | |
'viewable' : false | |
}, | |
{ | |
'template' : 'secondSlide.html', | |
'viewable' : true | |
}, | |
{ | |
'template' : 'thirdSlide.html', | |
'viewable' : true | |
} | |
] | |
}; | |
var countSlides = function() { | |
$scope.data.numViewableSlides = 0; | |
_.forEach($scope.data.slides, function(slide) { | |
if(slide.viewable === true) $scope.data.numViewableSlides++; | |
}) | |
console.log($scope.data.numViewableSlides + " viewable slides"); | |
} | |
countSlides(); | |
// Called to navigate to the main app | |
$scope.startApp = function() { | |
$state.go('main'); | |
}; | |
$scope.next = function() { | |
$ionicSlideBoxDelegate.next(); | |
}; | |
$scope.previous = function() { | |
$ionicSlideBoxDelegate.previous(); | |
}; | |
$scope.showBonus = function() { | |
var index = _.findIndex($scope.data.slides, { template : 'bonusSlide.html' }); | |
$scope.data.slides[index].viewable = true; | |
countSlides(); | |
$scope.data.initialInstruction = false | |
$scope.data.secondInstruction = true; | |
$ionicSlideBoxDelegate.update(); | |
}; | |
// Called each time the slide changes | |
$scope.slideChanged = function(index) { | |
$scope.data.slideIndex = index; | |
}; | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
body { | |
cursor: url('http://ionicframework.com/img/finger.png'), auto; | |
} | |
.slider { | |
height: 100%; | |
} | |
.slider-slide { | |
padding-top: 80px; | |
color: #000; | |
background-color: #fff; | |
text-align: center; | |
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; | |
font-weight: 300; | |
} | |
#logo { | |
margin: 30px 0px; | |
} | |
#list { | |
width: 170px; | |
margin: 30px auto; | |
font-size: 20px; | |
} | |
#list ol { | |
margin-top: 30px; | |
} | |
#list ol li { | |
text-align: left; | |
list-style: decimal; | |
margin: 10px 0px; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment