test-scroll.html 4.3 KB

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