私は WP が何をするのか 100% 理解していないので、これは全くのゴミかもしれません!
私のコードには、現在のコードの代わりに使用する部分であるテンプレートと、ページ<head>
に含めるコードの部分であるカウントダウン関数の 2 つの部分があります。
間隔が将来5秒で一定でない場合に備えて、秒を日、時間、分、秒に変換する機能もあります。
カウントダウン関数は、テンプレート コードによって設定されたすべてのカウントダウンを更新します。
それが役に立てば幸い :)
アップデート
delete
私のコードは、サーバー上の何も編集または削除しません。明らかに、私の変数の名前は、あなたにとって家に少し近すぎます:)完成したカウンターをリストに残します (問題ではありませんが、tick()
呼び出されたときに反復されるため、効率が低下します)
何が起こっているのかをよりよく理解できるように、私のコードが何をするのかを最後に説明しようとします。
WPSC テンプレート
<?php wpsc_start_category_query(array('category_group'=>get_option('wpsc_default_category'), 'show_thumbnails'=> 1)); ?>
<script type="text/javascript">
if (!wpsc_categories) { wpsc_categories = {}; }
wpsc_categories['countdown_<?php wpsc_print_category_id(); ?>'] = 5; // this value is the countdown in seconds
</script>
<div id="countdown_<?php wpsc_print_category_id(); ?>"></div>
<?php wpsc_end_category_query(); ?>
1 週間のカウントダウンが必要で、カウントダウンがページ ビュー全体にわたって持続するようにする場合 (更新時に 1 週間にリセットされないようにするため)、カウンターの開始日をサーバーに保存し、当時と現在の差を計算する必要があります ( php で) 5 の代わりにそれを使用します (とにかく、それはあなたが計画していたことだと思います!)
カウントダウン機能 - これはページのヘッダーに含める必要があります
<script type="text/javascript">
var wpsc_categories = [];
// the following function will update all counters using one timer (hopefully)
function tick() {
var element;
for (category in wpsc_categories) {
if (wpsc_categories.hasOwnProperty(category)) {
element = document.getElementById(category);
if (wpsc_categories[category] == 0) {
element.innerHTML = "countdown over!";
delete wpsc_categories[category];
} else {
// MODIFIED THIS LINE, SEE NOTE
//element.innerHTML = formatTime(wpsc_categories[category]--);
element.innerHTML = formatTime(wpsc_categories[category]);
wpsc_categories[category] -= 1;
}
}
}
//return setInterval(tick, 1000); //this line is bad :D
}
var interval = setInterval(tick, 1000) // start it running
// return formatted time from seconds (if required)
function formatTime(seconds) {
var numdays = Math.floor(seconds / 86400);
var numhours = Math.floor((seconds % 86400) / 3600);
var numminutes = Math.floor(((seconds % 86400) % 3600) / 60);
var numseconds = ((seconds % 86400) % 3600) % 60;
return (numdays>0?numdays+" days ":"")+(numhours>0?numhours+" hours ":"")+(numminutes>0?numminutes+" minutes ":"")+(numseconds>0?numseconds+" seconds":"")
}
</script>
ノート
もう少しわかりやすくするために、残り時間の更新方法を変更しました。--
少し面倒な減分演算子を使用しました。
説明
元のテンプレートは、カウントダウン コードとそれを呼び出す呼び出しを含む、すべてのカテゴリの大きなコード ブロックをコピーしました。これが、最後のカテゴリ タイマーだけが機能していた理由です。window.onload
後続の各カテゴリによって上書きされていました。
はい、無名関数を使用して関数のローリングを開始できたはずですが、それはおそらく最善の解決策ではありません。
今私のコードのために
wpsc_categoriesif (!wpsc_categories) { wpsc_categories = {}; }
は、カウンターに関する情報を格納するオブジェクトです。これは、オブジェクトが存在するかどうかを確認し、存在しない場合は作成して、次の like がカウンターに関する情報を追加できるようにします。
ブラウザーでは、クライアントは 3 つのサンプル グループに対して次のように表示されます。
<script type="text/javascript">
if (!wpsc_categories) { wpsc_categories = {}; }
wpsc_categories['countdown_example1'] = 5;
</script>
<div id="countdown_example1"></div>
<script type="text/javascript">
if (!wpsc_categories) { wpsc_categories = {}; }
wpsc_categories['countdown_example2'] = 5;
</script>
<div id="countdown_example2"></div>
<script type="text/javascript">
if (!wpsc_categories) { wpsc_categories = {}; }
wpsc_categories['countdown_example3'] = 5;
</script>
<div id="countdown_example3"></div>
このブロックのコードが JavaScript によって実行されるとすぐに、wpsc_categories 変数に 3 つの必要なカウンターに関する情報が入力されます。この情報はtick()
、タイマーの更新に使用されるものです。
更新 2setInterval
関数内で
使用されている私の例tick()
は悪かったです! setInterval は繰り返しタイマーであるため、 tick を呼び出すたびに新しいタイマーが作成されるため、時間が指数関数的に変化します:D
setTimeout()
ワンショット、setInterval()
あなたがそれを止めるまで続けます!