ソースを参照

Viewport: introduce the fullscreenchange event

customisations
alemart 11ヶ月前
コミット
7c98644c9d
2個のファイルの変更42行の追加6行の削除
  1. 19
    2
      docs/api/viewport.md
  2. 23
    4
      src/core/viewport.ts

+ 19
- 2
docs/api/viewport.md ファイルの表示

@@ -156,7 +156,24 @@ The viewport has been resized. This will happen when the user resizes the window
156 156
 **Example**
157 157
 
158 158
 ```js
159
-viewport.addEventListener('resize', event => {
159
+viewport.addEventListener('resize', () => {
160 160
     console.log('The viewport has been resized.');
161 161
 });
162
-```
162
+```
163
+
164
+### fullscreenchange
165
+
166
+The viewport has been switched into or out of fullscreen mode.
167
+
168
+*Since:* 0.3.0
169
+
170
+**Example**
171
+
172
+```js
173
+viewport.addEventListener('fullscreenchange', () => {
174
+    if(viewport.fullscreen)
175
+        console.log('Switched into fullscreen mode');
176
+    else
177
+        console.log('Switched out of fullscreen mode');
178
+});
179
+```

+ 23
- 4
src/core/viewport.ts ファイルの表示

@@ -41,7 +41,7 @@ export type ViewportContainer = HTMLDivElement;
41 41
 type ViewportSizeGetter = () => SpeedySize;
42 42
 
43 43
 /** All possible event types emitted by a Viewport */
44
-type ViewportEventType = 'resize';
44
+type ViewportEventType = 'resize' | 'fullscreenchange';
45 45
 
46 46
 /** An event emitted by a Viewport */
47 47
 class ViewportEvent extends AREvent<ViewportEventType> { }
@@ -306,12 +306,18 @@ class ViewportCanvases
306 306
  */
307 307
 class ViewportFullscreenHelper
308 308
 {
309
+    /** The container to be put in fullscreen */
310
+    private readonly _container: HTMLElement;
311
+
312
+
313
+
309 314
     /**
310 315
      * Constructor
311
-     * @param _container the container which will be put in fullscreen
316
+     * @param _viewport Viewport
312 317
      */
313
-    constructor(private readonly _container: HTMLElement)
318
+    constructor(private readonly _viewport: Viewport)
314 319
     {
320
+        this._container = _viewport.container;
315 321
     }
316 322
 
317 323
     /**
@@ -342,6 +348,7 @@ class ViewportFullscreenHelper
342 348
                     if(container === (document as any).webkitFullscreenElement) {
343 349
                         Utils.log('Entering fullscreen mode...');
344 350
                         resolve();
351
+                        this._triggerEvent();
345 352
                     }
346 353
                     else
347 354
                         reject(new TypeError());
@@ -360,6 +367,7 @@ class ViewportFullscreenHelper
360 367
             }).then(() => {
361 368
                 Utils.log('Entering fullscreen mode...');
362 369
                 resolve();
370
+                this._triggerEvent();
363 371
             }, reject);
364 372
         });
365 373
     }
@@ -387,6 +395,7 @@ class ViewportFullscreenHelper
387 395
                     if(doc.webkitFullscreenElement === null) {
388 396
                         Utils.log('Exiting fullscreen mode...');
389 397
                         resolve();
398
+                        this._triggerEvent();
390 399
                     }
391 400
                     else
392 401
                         reject(new TypeError());
@@ -403,6 +412,7 @@ class ViewportFullscreenHelper
403 412
             document.exitFullscreen().then(() => {
404 413
                 Utils.log('Exiting fullscreen mode...');
405 414
                 resolve();
415
+                this._triggerEvent();
406 416
             }, reject);
407 417
         });
408 418
     }
@@ -430,6 +440,15 @@ class ViewportFullscreenHelper
430 440
         else
431 441
             return false;
432 442
     }
443
+
444
+    /**
445
+     * Trigger a fullscreenchange event
446
+     */
447
+    _triggerEvent(): void
448
+    {
449
+        const event = new ViewportEvent('fullscreenchange');
450
+        this._viewport.dispatchEvent(event);
451
+    }
433 452
 }
434 453
 
435 454
 
@@ -794,7 +813,7 @@ export class Viewport extends ViewportEventTarget
794 813
         this._resizer = new ViewportResizer(this);
795 814
         this._resizer.setStrategyByName(this._style);
796 815
 
797
-        this._fullscreen = new ViewportFullscreenHelper(this.container);
816
+        this._fullscreen = new ViewportFullscreenHelper(this);
798 817
     }
799 818
 
800 819
     /**

読み込み中…
キャンセル
保存