キャンペーンのページでアクセス時より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)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。