ui.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /**
  2. * @Author: Bachir Soussi Chiadmi <bach>
  3. * @Date: 12-09-2017
  4. * @Email: bachir@figureslibres.io
  5. * @Last modified by: bach
  6. * @Last modified time: 12-09-2017
  7. * @License: GPL-V3
  8. */
  9. // var $ = require('jquery');
  10. // https://plainjs.com
  11. // jQuery(document).ready(function($) {
  12. // console.log('Hello Jquery');
  13. // var $window;
  14. var init = function(){
  15. console.log('UI init');
  16. // $window = $(window);
  17. // _____ __ _ __ __ _ __ __
  18. // / ___// /_(_)____/ /____ __ / /_(_) /_/ /__
  19. // \__ \/ __/ / ___/ //_/ / / / / __/ / __/ / _ \
  20. // ___/ / /_/ / /__/ ,< / /_/ / / /_/ / /_/ / __/
  21. // /____/\__/_/\___/_/|_|\__, / \__/_/\__/_/\___/
  22. // /____/
  23. // https://codepen.io/chrissp26/pen/gBrdo?editors=0010
  24. // var header_height = $('header').height();
  25. var header_height = document.getElementsByTagName('header')[0].clientHeight;
  26. console.log(header_height);
  27. // var $sticky_clone_wrapper = $('<div>').addClass('sticky-clone-wrapper').appendTo('body');
  28. var sticky_clone_wrapper = document.createElement('div');
  29. sticky_clone_wrapper.classList.add('sticky-clone-wrapper');
  30. document.body.append(sticky_clone_wrapper);
  31. //
  32. // var $stickies = $('h1.part-title').addClass('sticky').each(function(i){
  33. // var $sticky = $(this);
  34. // $sticky
  35. // .data('originalPosition', $sticky.offset().top)
  36. // .data('originalHeight', $sticky.outerHeight());
  37. // });
  38. var stickies = new Array();
  39. Array.from(document.querySelectorAll('h1.part-title')).forEach(function(e){
  40. // console.log('sticky', e);
  41. e._part = e.getAttribute('part');
  42. stickies.push(e)
  43. });
  44. console.log('stickies', stickies);
  45. //
  46. // var OnScroll = function(event){
  47. // var $last_sticky;
  48. // $stickies.each(function(i){
  49. // var $sticky = $(this);
  50. // var pos = $sticky.data('originalPosition');
  51. // if(pos < $window.scrollTop()+header_height){
  52. //
  53. // }
  54. // // if(i == 1){
  55. // // console.log(pos +" | "+$window.scrollTop());
  56. // // }
  57. // // if(pos < $window.scrollTop()+header_height){
  58. // // if(!$sticky.is('.sticked')){
  59. // // $sticky.addClass('sticked').clone().appendTo($sticky_clone_wrapper.empty());
  60. // // }
  61. // // }else{
  62. // // if($sticky.is('.sticked')){
  63. // // $sticky.removeClass('sticked');
  64. // // $('.part-title[part="'+$sticky.attr('part')+'"]', $sticky_clone_wrapper).remove();
  65. // // }
  66. // // }
  67. // });
  68. // };
  69. var last_sticky = "", sticked_sticky, clone;
  70. var OnScroll = function(event){
  71. // console.log('on scrool', event);
  72. sticked_sticky = false;
  73. for (var i = stickies.length-1; i >= 0; i--) {
  74. if(stickies[i].getBoundingClientRect().top < header_height){
  75. sticked_sticky = stickies[i];
  76. break;
  77. }
  78. }
  79. if (sticked_sticky) {
  80. // console.log('sticked_sticky', sticked_sticky._part);
  81. if(last_sticky !== sticked_sticky._part){
  82. // console.log('new sticky', last_sticky);
  83. // fill sticky_clone_wrapper
  84. clone = sticked_sticky.cloneNode(true);
  85. sticky_clone_wrapper.innerHTML = '';
  86. sticky_clone_wrapper.appendChild(clone);
  87. last_sticky = sticked_sticky._part;
  88. }
  89. }else{
  90. // empty sticky_clone_wrapper
  91. sticky_clone_wrapper.innerHTML = '';
  92. }
  93. };
  94. //
  95. // $window.on('scroll', OnScroll);
  96. // console.log('window', window);
  97. window.onscroll = OnScroll;
  98. }
  99. // });
  100. module.exports = {
  101. init : init
  102. }