test-scroll.html 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>reveal.js - Test Scroll View</title>
  6. <link rel="stylesheet" href="../dist/reveal.css">
  7. <link rel="stylesheet" href="../node_modules/qunit/qunit/qunit.css">
  8. <script src="../node_modules/qunit/qunit/qunit.js"></script>
  9. </head>
  10. <body style="overflow: auto;">
  11. <div id="qunit"></div>
  12. <div id="qunit-fixture"></div>
  13. <div class="reveal" style="opacity: 0; pointer-events: none;">
  14. <div class="slides">
  15. <section>
  16. <h1>slide 1</h1>
  17. </section>
  18. <section>
  19. <h1>slide 2</h1>
  20. </section>
  21. <section>
  22. <h1>slide 3</h1>
  23. <p class="fragment">fragment 1</p>
  24. <p class="fragment">fragment 2</p>
  25. <p class="fragment">fragment 3</p>
  26. </section>
  27. <section>
  28. <h1>slide 4</h1>
  29. </section>
  30. </div>
  31. </div>
  32. <script src="../dist/reveal.js"></script>
  33. <script>
  34. QUnit.config.testTimeout = 30000;
  35. QUnit.config.reorder = false;
  36. function getScrollHeight() {
  37. return Reveal.getViewportElement().scrollHeight;
  38. }
  39. function getViewportHeight() {
  40. return Reveal.getViewportElement().offsetHeight;
  41. }
  42. Reveal.initialize({ view: 'scroll' }).then( async () => {
  43. QUnit.module( 'Scroll View' );
  44. QUnit.test( 'Activates', assert => {
  45. assert.ok( getScrollHeight() > getViewportHeight(), 'Is overflowing' );
  46. });
  47. QUnit.test( 'Can be toggled via API', assert => {
  48. Reveal.toggleScrollView( false );
  49. assert.ok( getScrollHeight() <= getViewportHeight(), 'Is not overflowing' );
  50. Reveal.toggleScrollView( true );
  51. assert.ok( getScrollHeight() > getViewportHeight(), 'Is overflowing' );
  52. });
  53. QUnit.test( 'Changes present slide when scrolling', assert => {
  54. assert.timeout( 200 );
  55. assert.expect( 2 );
  56. const slides = document.querySelectorAll( '.reveal .slides section' );
  57. assert.ok( slides[0].classList.contains( 'present' ), 'First slide is present' );
  58. Reveal.getViewportElement().scrollTop = getViewportHeight() * 1;
  59. return new Promise( resolve => {
  60. setTimeout(() => {
  61. assert.ok( slides[1].classList.contains( 'present' ), 'Second slide is present' );
  62. resolve();
  63. }, 100);
  64. } );
  65. });
  66. QUnit.test( 'Fires slideschanged event when scrolling', assert => {
  67. assert.timeout( 200 );
  68. assert.expect( 2 );
  69. const slides = document.querySelectorAll( '.reveal .slides section' );
  70. return new Promise( resolve => {
  71. let callback = ( event ) => {
  72. Reveal.off( 'slidechanged', callback );
  73. assert.ok( true, 'slidechanged event fired' );
  74. assert.ok( event.currentSlide.classList.contains( 'present' ), 'slidechanged provides reference to currentSlide' );
  75. resolve();
  76. }
  77. Reveal.on( 'slidechanged', callback );
  78. Reveal.getViewportElement().scrollTop = getViewportHeight() * 2;
  79. });
  80. });
  81. QUnit.test( 'Fires fragmentshown event when scrolling', assert => {
  82. assert.timeout( 200 );
  83. assert.expect( 2 );
  84. const slides = document.querySelectorAll( '.reveal .slides section' );
  85. return new Promise( resolve => {
  86. let callback = ( event ) => {
  87. Reveal.off( 'fragmentshown', callback );
  88. assert.ok( true, 'fragmentshown event fired' );
  89. assert.ok( event.fragments.length > 0, 'fragmentshown provides reference to fragment nodes' );
  90. resolve();
  91. }
  92. Reveal.on( 'fragmentshown', callback );
  93. Reveal.getViewportElement().scrollTop = 0;
  94. Reveal.next();
  95. Reveal.next();
  96. Reveal.getViewportElement().scrollTop += getViewportHeight();
  97. });
  98. });
  99. QUnit.test( 'Fires fragmenthidden event when scrolling', assert => {
  100. assert.timeout( 200 );
  101. assert.expect( 2 );
  102. const slides = document.querySelectorAll( '.reveal .slides section' );
  103. return new Promise( resolve => {
  104. let callback = ( event ) => {
  105. Reveal.off( 'fragmenthidden', callback );
  106. assert.ok( true, 'fragmenthidden event fired' );
  107. assert.ok( event.fragments.length > 0, 'fragmenthidden provides reference to fragment nodes' );
  108. resolve();
  109. }
  110. Reveal.on( 'fragmenthidden', callback );
  111. Reveal.getViewportElement().scrollTop = 0;
  112. Reveal.next();
  113. Reveal.next();
  114. Reveal.next();
  115. Reveal.getViewportElement().scrollTop -= getViewportHeight();
  116. });
  117. });
  118. } );
  119. </script>
  120. </body>
  121. </html>