/application.js

https://github.com/GerManson/german.pikevo.com · JavaScript · 115 lines · 72 code · 31 blank · 12 comment · 3 complexity · 3c64de2a2df689d572fb72765ff95971 MD5 · raw file

  1. var Application = {
  2. images_dir: "images/",
  3. placeholder_id: "player",
  4. timeline_id: "timeline",
  5. video_interval: null,
  6. img: null,
  7. frame_rate: 400, // in miliseconds
  8. images_list: [],
  9. frame_count: 0,
  10. total_frames: 0,
  11. init: function() {
  12. var player = $("#" + Application.placeholder_id);
  13. this.img = $("#frame");
  14. // encodes json from serverside
  15. Application.getImagesList = eval('(' + $("#images_list").html() + ')');
  16. // builds the array also fills sidebar
  17. Application.buildIndex();
  18. // since one picture represents a frame, total frame equals total pictures
  19. Application.total_frames = $(Application.images_list).size();
  20. // start playing
  21. Application.video_interval = setInterval(Application.nextFrame, Application.frame_rate);
  22. // recursion
  23. //Application.nextFrame();
  24. },
  25. buildIndex: function() {
  26. // draw link on timeline
  27. var timeline = $("#" + Application.timeline_id);
  28. var menu = $.UL({});
  29. timeline.append(menu);
  30. $.each(Application.getImagesList, function(i, item) {
  31. if (item != ".DS_Store")
  32. {
  33. Application.images_list.push(item);
  34. $(menu).append(
  35. $.A({ className: "frame" + i, href: "javascript:Application.goToFrame("+i+");" }, $.LI({}, item)));
  36. }
  37. });
  38. // resize url to fit all links in one row
  39. timeline.find("ul").css("width", (90 + 24) * Application.images_list.length);
  40. },
  41. goToFrame: function(frame) {
  42. Application.pause();
  43. Application.frame_count = frame;
  44. Application.nextFrame();
  45. },
  46. pause: function() {
  47. clearInterval(Application.video_interval);
  48. },
  49. resume: function() {
  50. Application.video_interval = setInterval(Application.nextFrame, Application.frame_rate);
  51. },
  52. start: function() {
  53. Application.frame_count = 0;
  54. clearInterval(Application.video_interval);
  55. Application.video_interval = setInterval(Application.nextFrame, Application.frame_rate);
  56. },
  57. nextFrame: function() {
  58. // if reached total, stop interval
  59. if (Application.frame_count >= Application.total_frames)
  60. {
  61. clearInterval(Application.video_interval);
  62. return;
  63. }
  64. var nextFrameImage = Application.images_dir + Application.images_list[Application.frame_count];
  65. var currentImage = Application.img.find("img");
  66. //nextFrameImage = encodeURIComponent(nextFrameImage);
  67. //console.debug(nextFrameImage);
  68. Application.img.css("background-image", "url('" + nextFrameImage + "')");
  69. $("#frame img").animate({
  70. opacity: 0
  71. }, Application.frame_rate/2, function() {
  72. currentImage.remove();
  73. Application.img.append($.IMG({ src: nextFrameImage }));
  74. });
  75. // update active link on sidebar
  76. $("#timeline li").removeClass("active");
  77. $("#timeline .frame" + Application.frame_count).focus()
  78. .find("li").addClass("active");
  79. Application.frame_count++;
  80. }
  81. };
  82. $(document).ready(function() {
  83. Application.init();
  84. });