シートダイアログをバネで開閉 - chrono-kinesis 進捗
アニメーションライブラリ chrono-kinesis でシートダイアログをバネで表示非表示するExampleを追加しました。
Exampleリンク 内部実装 HTMLのdialogの実装例としても、参考になるのではないかと思います。
ダイアログの実装 class DialogGateClock { // Clockを起動しダイアログを閉じることを要求する public requestClose() { if (!this.target.isConnected || this.state !== "open") return; this.state = "request-close"; this._heartbeat(); } // Clockを起動せずにDialogを閉じる public slientClose() { if (!this.target.isConnected || this.state === "close") return; this.state = "close"; this._removeListeners(); this._close(); } // ... } requestCloseは実際にHTMLに対して終了(close)を行わず、その動作だけインスタンスに保持して、シミュレーションしていきます。 十分に減退したら、呼び出し元からslientCloseを使って実際に要素をcloseします。
また複数のモーダルに対応しています。
modal: top-layerに配置されるbackdropのありのダイアログ modeless: top-layerに配置されないbackdropも基本ないダイアログ popover: top-layerに配置されるbackdropの基本ないダイアログ それぞれ、モーダル外クリックやESCキーも含めて、いい感じに開閉アニメーションするようになっています。
※popoverは古いブラウザでは非対応なのでmodelessにフォールバックしています。 手持ちのiPhone8では、、対応しておらず。。
constructor(element, options) { if (options.type === "popover" && !DialogGateClock.enablePopoverSupport(target)) { console.
[続きを読む]