質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

5907閲覧

JavaScriptのsetTimeoutの残り時間を取得する方法ってありますか?

Kosei

総合スコア13

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/01/07 10:49

Electronでソフトを作成しているのですが、閉じるボタンが押されてもまだsetTimeoutの処理が行われていないとき、閉じるのを一度キャンセルして処理が終了してから閉じるというふうにしたいのですが、setTimeoutの残り時間を取得する方法ってありますか?

setTimeoutではやっぱり残り時間を取得することはできなくて、自分でカウントするしかないんでしょうか?

ちなみに、閉じるのをキャンセルする方法はもうわかっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

標準では、
setTimeout でコールバックに設定された関数が、あと何(ミリ)秒後に実行されるか?
を取得する方法は用意されていないので、
以下の質問

stackoverflow: find-the-time-left-in-a-settimeout

の回答にあるような、setTimeout をラップしたような関数を自前で書く必要があるようです。

しかし、

まだsetTimeoutの処理が行われていないとき、閉じるのを一度キャンセルして処理が終了してから閉じる

というようなことをしたいときは、

  • タイマーが稼働中であるかどうかを判定するフラグ

  • タイマーの稼働中に「閉じる」が押されたことを判定するフラグ

の2つを持って制御すれば可能と思います。

どこまで参考になるかわかりませんが、サンプルとして以下のようなコードを書きました。

https://jsfiddle.net/5oLm0dtu/2/

上記のサンプルは以下のような動きをします。

  • 灰色の <div> がウインドウのつもりです。
  • タイマーが動いてないときは、[閉じる]をクリックすると <div> が消えます。
  • [タイマー開始] をクリックすると、10秒後にコールバック関数delayedTaskが実行されます。
  • タイマーの稼働中も、[閉じる]は一度だけクリックできますが、すぐに <div> は消えません。
  • 10秒後に実行されるコールバック関数の中で、[閉じる]がクリックされていれば <div>を消します。

とはいえ、このようなフラグが増えるとコードが見にくくなるので、
冒頭の stackoverflow の回答にあるような関数を書いて
使い回すのもアリだと思います。

以上参考になれば幸いです。

投稿2018/01/07 13:22

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kosei

2018/01/08 02:20

返信遅れてすいません。 回答していただいた方法で無事解決できそうです。 ありがとうございます。
jun68ykt

2018/01/08 02:32

解決できそうとのことで、よかったです!
guest

0

setTimeoutする前に時刻を保持すれば現在時刻と比較してどれ位経ったかはわかると思いますが
それをするくらいならsetTimeout前に閉じるボタンを使用不可にするなりイベントを起こさないように
するなりして、setTimeoutの処理の最後にそれらを活性化すればいいのではないでしょうか?

投稿2018/01/07 12:05

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kosei

2018/01/08 02:24

回答ありがとうございます。 今回の場合では、jun68yktさんの回答の方が上手く実装できそうだったので、そちらをベストアンサーに選ばさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問