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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1979閲覧

タイマー終了時のページ遷移とカウントダウン日数について

uco

総合スコア18

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/09/10 04:30

キャンペーンのページでアクセス時より24時間のカウントダウンを開始し
カウントダウン終了後に「終了」のhtmlページへ遷移したいのですが

検索にて参考にさせていただいたスクリプトから書き換えてみているのですが
JavaScriptについてまだまだ修行がたらす初歩的なところかと思いますが
つまづいております。

仕様
初回アクセス時からリロードしてもカウントダウンが止まらない仕様にするため
キャンペーンidなるものが付与されてます。

できないこと
1.日数の変更をすると増えてしまう
2.2箇所に表示したいがidでのエリア指定のためか最初のエリアしか表示できない
3.ページ遷移できるのか実践できない(カウントダウンが減らせず・・・)

よろしくお願いいたします。。

const campaign_id = "cid08" // キャンペーンID const period = 1 // 期間の日数 const output_format = "<b>残り</b>D<b>日</b>HH<b>時間</b>mm<b>分</b>ss<b>秒</b>" // 出力フォーマット const finish_message = document.getElementById("display_fin") // 期間終了後のメッセージ const display_area = document.getElementById("display_area") // 表示エリア function divmod(a, b){  /*   * 商と剰余を配列で返す関数   */  q = parseInt(a / b)  mod = a % b  return [q, mod] } const cookie_name = 'limit_unix_' + campaign_id const limit_unix = Cookies.get(cookie_name) let limit if(limit_unix){  // すでに訪問した時  limit = dayjs(parseInt(limit_unix)) }else{  // 初回訪問の時  limit = dayjs().add(period, "day")  Cookies.set(cookie_name, limit.valueOf(), { expires: 3 }) } const campaign_mainloop = setInterval(function(){  let rem_seconds = limit.diff(dayjs(), "second")  if(rem_seconds > 0){   // 残り時間が正の時   let tmp_day = divmod(rem_seconds, 86400)   let tmp_hour = divmod(tmp_day[1], 3600)   let tmp_min = divmod(tmp_hour[1], 60) let tmp_sec = String(tmp_min[1]).split(".")   rem_time = dayjs(new Date(null, null, tmp_day[0], tmp_hour[0], tmp_min[0], tmp_sec[0]))   out = rem_time.format(output_format)  }else{   // キャンペーン終了時   out = finish_message   clearInterval(campaign_mainloop) // ループ処理止める window.location.href = 'not.html';  }  display_area.innerHTML = out }, 1000)

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

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

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

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

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

guest

回答1

0

自己解決

知人に解決策を教授いただきました!

const campaign_id = "cid001xxh" // キャンペーンID const period = 1 // 期間の日数 const periodTime = 5000 //実証テスト時に秒数を入れる const output_format = "<b>残り</b>HH<b>時間</b>mm<b>分</b>ss<b>秒</b>" // 出力フォーマット const finish_message = "キャンペーンは終了しました。" // 期間終了後のメッセージ const display_area01 = document.getElementById("display_area01") // 表示エリア const display_area02 = document.getElementById("display_area02") // 表示エリア function divmod(a, b){ /* * 商と剰余を配列で返す関数 */ q = parseInt(a / b) mod = a % b return [q, mod] } const cookie_name = 'limit_unix_' + campaign_id const limit_unix = Cookies.get(cookie_name) //Cookieからゲット let limit if(limit_unix){ // すでに訪問した時 limit = dayjs(parseInt(limit_unix)) }else{ // 初回訪問の時 // limit = dayjs().add(period, "day") limit = dayjs().add(periodTime, "second") //実証テスト時はこちらを生かす Cookies.set(cookie_name, limit.valueOf(), { expires: 365 }) //Cookieにセット } const campaign_mainloop = setInterval(function(){ let rem_seconds = limit.diff(dayjs(), "second") if(rem_seconds > 0){ // 残り時間が正の時 let tmp_day = divmod(rem_seconds, 86400) let tmp_hour = divmod(tmp_day[1], 3600) let tmp_min = divmod(tmp_hour[1], 60) rem_time = dayjs(new Date(null, null, tmp_day[0], tmp_hour[0], tmp_min[0], tmp_min[1])) out = rem_time.format(output_format) }else{ // キャンペーン終了時 out = finish_message clearInterval(campaign_mainloop) // ループ処理止める window.location.href = 'not.html' } display_area01.innerHTML = out display_area02.innerHTML = out }, 1000)

投稿2020/09/10 13:28

uco

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問