ctrl.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. app.controller('MusicCtrl',
  2. ["$sce",'$scope', function ($sce, $scope) {
  3. $scope.API = null;
  4. $scope.active = 0;
  5. $scope.audios = [
  6. {
  7. title: "1. Lentement",
  8. artist:"Miaow",
  9. poster: "img/b0.jpg",
  10. sources: [
  11. {src: $sce.trustAsResourceUrl("http://flatfull.com/themes/assets/musics/Miaow-03-Lentement.mp3"), type: "audio/mpeg"},
  12. {src: $sce.trustAsResourceUrl("http://flatfull.com/themes/assets/musics/Miaow-03-Lentement.ogg"), type: "audio/ogg"}
  13. ]
  14. },
  15. {
  16. title: "2. Bubble",
  17. artist:"Miaow",
  18. poster: "img/b1.jpg",
  19. sources: [
  20. {src: $sce.trustAsResourceUrl("http://flatfull.com/themes/assets/musics/Miaow-07-Bubble.mp3"), type: "audio/mpeg"},
  21. {src: $sce.trustAsResourceUrl("http://flatfull.com/themes/assets/musics/Miaow-07-Bubble.ogg"), type: "audio/ogg"}
  22. ]
  23. },
  24. {
  25. title: "3. Partir",
  26. artist:"Miaow",
  27. poster: "img/b2.jpg",
  28. sources: [
  29. {src: $sce.trustAsResourceUrl("http://flatfull.com/themes/assets/musics/Miaow-09-Partir.mp3"), type: "audio/mpeg"},
  30. {src: $sce.trustAsResourceUrl("http://flatfull.com/themes/assets/musics/Miaow-09-Partir.ogg"), type: "audio/ogg"}
  31. ]
  32. }
  33. ];
  34. $scope.config = {
  35. sources: $scope.audios[0].sources,
  36. title: $scope.audios[0].title,
  37. repeat: false,
  38. shuffle: false,
  39. autoPlay: true,
  40. theme: {
  41. url: "js/app/music/videogular.css"
  42. }
  43. };
  44. $scope.onPlayerReady = function(API) {
  45. $scope.API = API;
  46. if ($scope.API.currentState == 'play' || $scope.isCompleted) $scope.API.play();
  47. $scope.isCompleted = false;
  48. };
  49. $scope.onComplete = function() {
  50. $scope.isCompleted = true;
  51. // shuffle
  52. if($scope.config.shuffle){
  53. $scope.active = $scope.getRandom($scope.active);
  54. // next item
  55. }else{
  56. $scope.active++;
  57. }
  58. // last item
  59. if ($scope.active >= $scope.audios.length) {
  60. $scope.active = 0;
  61. // repeat
  62. if($scope.config.repeat){
  63. $scope.setActive($scope.active);
  64. }
  65. }else{
  66. $scope.setActive($scope.active);
  67. }
  68. };
  69. $scope.getRandom = function(index){
  70. var i = Math.floor( Math.random() * $scope.audios.length );
  71. if ( !(i-index) ){
  72. i = $scope.getRandom( index );
  73. }
  74. return i;
  75. }
  76. $scope.play = function(index){
  77. $scope.isCompleted = true;
  78. // get prev or next item
  79. index == "next" ? $scope.active++ : $scope.active--;
  80. if ($scope.active >= $scope.audios.length) $scope.active = 0;
  81. if ($scope.active == -1) $scope.active = $scope.audios.length - 1;
  82. // play it
  83. $scope.setActive($scope.active);
  84. };
  85. $scope.setActive = function(index){
  86. $scope.API.stop();
  87. $scope.config.sources = $scope.audios[index].sources;
  88. $scope.config.title = $scope.audios[index].title;
  89. };
  90. $scope.toggleRepeat = function(){
  91. $scope.config.repeat = !$scope.config.repeat;
  92. if ($scope.isCompleted) $scope.API.play();
  93. };
  94. $scope.toggleShuffle = function(){
  95. $scope.config.shuffle = !$scope.config.shuffle;
  96. console.log($scope.API.currentState);
  97. if ($scope.isCompleted) $scope.API.play();
  98. };
  99. // video
  100. $scope.video = {
  101. sources: [
  102. {src: $sce.trustAsResourceUrl("http://flatfull.com/themes/assets/video/big_buck_bunny_trailer.m4v"), type: "video/mp4"},
  103. {src: $sce.trustAsResourceUrl("http://flatfull.com/themes/assets/video/big_buck_bunny_trailer.webm"), type: "video/webm"},
  104. {src: $sce.trustAsResourceUrl("http://flatfull.com/themes/assets/video/big_buck_bunny_trailer.ogv"), type: "video/ogg"}
  105. ],
  106. theme: {
  107. url: "js/app/music/videogular.css"
  108. },
  109. plugins: {
  110. controls: {
  111. autoHide: true,
  112. autoHideTime: 5000
  113. },
  114. poster: "img/c1.jpg"
  115. }
  116. };
  117. }]
  118. );