script.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. $(document).ready(function() {
  2. var _frames;
  3. var _$timelaps = $('#timelaps'),
  4. _$video = $("#timelapsvid"),
  5. _video = document.getElementById('timelapsvid'),
  6. _fps = 12,
  7. _vid_current_time;
  8. var _timeline, _timeline_container = document.getElementById('timeline'),
  9. _tl_data_ar = [], _tl_items, _tl_start, _tl_end;
  10. var _mapout, _mapout_zoom=7, _mapout_pin, _mapout_provider = "CartoDB.DarkMatter";
  11. var _mapin, _mapin_zoom=15, _mapin_pin, _mapin_provider = "CartoDB.DarkMatter";
  12. var _map_pin_coordinates;
  13. var _mapicon = L.icon({
  14. iconUrl: 'assets/icon.svg',
  15. iconSize: [20, 20],
  16. iconAnchor: [10, 10]
  17. });
  18. function init(){
  19. console.log("Init");
  20. // teasing
  21. // var now = Date.now();
  22. // var opening = new Date("2016-07-02T18:30");
  23. // // console.log(now);
  24. // // console.log(limit.getTime());
  25. // if( window.location.hostname == "centipede.hehe.org" && now < opening.getTime()){
  26. // $('body').addClass('teasing');
  27. // setTimeout(function(){
  28. // window.location.reload();
  29. // },1000*60);
  30. // }else{
  31. loadData();
  32. // }
  33. };
  34. function loadData(){
  35. console.log('loadData');
  36. // $.getJSON('metadata/frame.json',function(data){
  37. // setUpData(data.frames)
  38. // });
  39. $.ajax({
  40. dataType:"json",
  41. url:'metadata/frames.json',
  42. cache: false,
  43. success:setUpData
  44. });
  45. console.log('getMetaData END');
  46. };
  47. function setUpData(d){
  48. console.log("setUpData");
  49. _frames = d.frames;
  50. // console.log(_frames);
  51. for (i in _frames) {
  52. // convert gps from string to float array
  53. _frames[i].gps = _frames[i].gps.split(',').map(function(a) {
  54. return parseFloat(a);
  55. });
  56. }
  57. // timeline
  58. _tl_start= new Date(_frames[0].datetime);
  59. _tl_end= new Date(_frames[_frames.length-1].datetime);
  60. // console.log('_tl_start : '+_tl_start+" | _tl_end"+_tl_end);
  61. // map
  62. _map_pin_coordinates = _frames[0].gps;
  63. console.log(_map_pin_coordinates);
  64. initDataReady();
  65. };
  66. function initDataReady(){
  67. console.log("initDataReady");
  68. setupTimeline();
  69. setupMap();
  70. setupVideoEvents();
  71. play();
  72. setTimeout(function(){
  73. _video.play();
  74. }, 2000);
  75. }
  76. /*
  77. _ _ _ _
  78. | | (_) | (_)
  79. | |_ _ _ __ ___ ___| |_ _ __ ___
  80. | __| | '_ ` _ \ / _ \ | | '_ \ / _ \
  81. | |_| | | | | | | __/ | | | | | __/
  82. \__|_|_| |_| |_|\___|_|_|_| |_|\___|
  83. */
  84. function setupTimeline(){
  85. // Create a DataSet (allows two way data-binding)
  86. // _tl_items = new vis.DataSet(_tl_data_ar);
  87. // Configuration for the Timeline
  88. // var options = {};
  89. // Create a Timeline
  90. _timeline = new vis.Timeline(_timeline_container, [], {
  91. // height:'50px',
  92. showCurrentTime:false,
  93. start:_tl_start,
  94. end:_tl_end,
  95. stack:false
  96. });
  97. _timeline.addCustomTime(_tl_start, "videotime");
  98. _timeline.on('click', onClickTimeline)
  99. }
  100. function onClickTimeline(props){
  101. console.log("onClickTimeline", props.time);
  102. // seekVideoTo(props.items[0]);
  103. };
  104. function moveTimelineCursor(date){
  105. _timeline.setCustomTime(date, "videotime", {animation:false});
  106. _timeline.moveTo(date, {animation:false});
  107. }
  108. /*
  109. __ __
  110. | \/ |
  111. | \ / | __ _ _ __
  112. | |\/| |/ _` | '_ \
  113. | | | | (_| | |_) |
  114. |_| |_|\__,_| .__/
  115. | |
  116. |_|
  117. */
  118. function setupMap(){
  119. console.log('setupMap');
  120. _mapout = L.map('mapout', {
  121. center:_map_pin_coordinates,
  122. zoom:_mapout_zoom,
  123. zoomControl:false,
  124. attributionControl:false
  125. });
  126. L.tileLayer.provider(_mapout_provider).addTo(_mapout);
  127. _mapout_pin = L.marker(_map_pin_coordinates, {icon:_mapicon}).addTo(_mapout);
  128. _mapin = L.map('mapin', {
  129. center:_map_pin_coordinates,
  130. zoom:_mapin_zoom,
  131. zoomControl:false,
  132. attributionControl:false
  133. });
  134. L.tileLayer.provider(_mapin_provider).addTo(_mapin);
  135. _mapin_pin = L.marker(_map_pin_coordinates, {icon:_mapicon}).addTo(_mapin);
  136. };
  137. function moveMapPin(c){
  138. _mapout.setView(c, _mapout_zoom);
  139. _mapout_pin.setLatLng(c);
  140. _mapout_pin.update(c);
  141. //
  142. _mapin.setView(c, _mapin_zoom);
  143. _mapin_pin.setLatLng(c);
  144. _mapin_pin.update(c);
  145. };
  146. /*
  147. __ ___ _
  148. \ \ / (_) | |
  149. \ \ / / _ __| | ___ ___
  150. \ \/ / | |/ _` |/ _ \/ _ \
  151. \ / | | (_| | __/ (_) |
  152. \/ |_|\__,_|\___|\___/
  153. */
  154. function setupVideoEvents(){
  155. // console.log("setupVideoEvents");
  156. _$video.on("click", onClickVid);
  157. };
  158. function onClickVid(e){
  159. console.log("onClickVid",e);
  160. if(_video.paused){
  161. _video.play();
  162. }else{
  163. _video.pause();
  164. }
  165. };
  166. // function seekVideoTo(f){
  167. // console.log("seekVideoTo frame", f);
  168. // _video.pause();
  169. // _video.currentTime = f/_fps;
  170. // };
  171. /*
  172. _ _ _
  173. (_) | | (_)
  174. __ _ _ __ _ _ __ ___ __ _| |_ _ ___ _ __
  175. / _` | '_ \| | '_ ` _ \ / _` | __| |/ _ \| '_ \
  176. | (_| | | | | | | | | | | (_| | |_| | (_) | | | |
  177. \__,_|_| |_|_|_| |_| |_|\__,_|\__|_|\___/|_| |_|
  178. */
  179. function play(millis){
  180. requestAnimationFrame(play);
  181. // console.log("_video.playing",_video.paused);
  182. if (!_video.paused) {
  183. moveTimelineCursor(_frames[vt2f(_video.currentTime)].datetime);
  184. moveMapPin(_frames[vt2f(_video.currentTime)].gps);
  185. }
  186. // now = Date.now();
  187. // delta = now - then;
  188. //
  189. // if(delta > interval){
  190. // then = now -(delta % interval);
  191. // }
  192. }
  193. /* helpers */
  194. function vt2f(ct){
  195. // console.log("Video Time 2 frame");
  196. return Math.round(ct/(1/_fps));
  197. // console.log("frame", frame);
  198. }
  199. init();
  200. });