返回 reveal.js
test-state.html
根目录 / test / test-state.html
1 <!doctype html>
2 <html lang="en">
3
4 <head>
5 <meta charset="utf-8">
6
7 <title>reveal.js - Test State</title>
8 </head>
9
10 <body style="overflow: auto;">
11
12 <div id="qunit"></div>
13 <div id="qunit-fixture"></div>
14
15 <div class="reveal" style="display: none;">
16
17 <div class="slides">
18
19 <section>No state</section>
20 <section id="slide2" data-state="state1">State 1</section>
21 <section data-state="state1">State 1</section>
22 <section data-state="state2">State 2</section>
23 <section>
24 <section>No state</section>
25 <section data-state="state1">State 1</section>
26 <section data-state="state3">State 3</section>
27 <section>No state</section>
28 </section>
29 <section>No state</section>
30
31 </div>
32
33 </div>
34
35 <script type="module">
36 import 'reveal.css';
37 import 'qunit/qunit/qunit.css';
38 import QUnit from 'qunit';
39 import Reveal from 'reveal.js';
40
41 Reveal.initialize();
42
43 QUnit.module( 'State' );
44
45 QUnit.test( 'Fire events when changing slide', function( assert ) {
46 assert.expect( 2 );
47 var state1 = assert.async();
48 var state2 = assert.async();
49
50 var _onState1 = function( event ) {
51 assert.ok( true, 'state1 fired' );
52 state1();
53 }
54
55 var _onState2 = function( event ) {
56 assert.ok( true, 'state2 fired' );
57 state2();
58 }
59
60 Reveal.on( 'state1', _onState1 );
61 Reveal.on( 'state2', _onState2 );
62
63 Reveal.slide( 1 );
64 Reveal.slide( 3 );
65
66 Reveal.off( 'state1', _onState1 );
67 Reveal.off( 'state2', _onState2 );
68 });
69
70 QUnit.test( 'Fire state events for vertical slides', function( assert ) {
71 assert.expect( 2 );
72 var done = assert.async( 2 );
73
74 var _onState1 = function( event ) {
75 assert.ok( true, 'state1 fired' );
76 done();
77 }
78
79 var _onState3 = function( event ) {
80 assert.ok( true, 'state3 fired' );
81 done();
82 }
83
84 Reveal.on( 'state1', _onState1 );
85 Reveal.on( 'state3', _onState3 );
86
87 Reveal.slide( 0 );
88 Reveal.slide( 4, 1 );
89 Reveal.slide( 4, 2 );
90
91 Reveal.off( 'state1', _onState1 );
92 Reveal.off( 'state3', _onState3 );
93 });
94
95 QUnit.test( 'No events if state remains unchanged', function( assert ) {
96 var stateChanges = 0;
97
98 var _onEvent = function( event ) {
99 stateChanges += 1;
100 }
101
102 Reveal.on( 'state1', _onEvent );
103
104 Reveal.slide( 0 ); // no state
105 Reveal.slide( 1 ); // state1
106 Reveal.slide( 2 ); // state1
107 Reveal.prev(); // state1
108 Reveal.next(); // state1
109 Reveal.slide( 4, 1 ); // state1
110 Reveal.slide( 0 ); // no state
111
112 Reveal.off( 'state1', _onEvent );
113
114 assert.strictEqual( stateChanges, 1, 'no event was fired when going to slide with same state' );
115 });
116
117 QUnit.test( 'Event order', function( assert ) {
118 var _onEvent = function( event ) {
119 assert.ok( Reveal.getCurrentSlide() == document.querySelector( '#slide2' ), 'correct current slide immediately after state event' );
120 }
121
122 Reveal.on( 'state1', _onEvent );
123
124 Reveal.slide( 0 );
125 Reveal.slide( 1 );
126
127 Reveal.off( 'state1', _onEvent );
128 });
129
130 </script>
131
132 </body>
133 </html>
134
134 lines HTML