埋め込み要素の内容 のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- 埋め込み要素の内容 へ行く。
- 1 (2022-09-24 (土) 19:45:45)
- 2 (2022-09-25 (日) 11:34:22)
- 3 (2022-10-04 (火) 17:48:31)
定義番号1
/*
特集記事などをサイドメニュー内に表示し、一定回数のページ遷移やリロードが発生した後、 特集記事を簡易表示させるためのプラグインです。メニューブロック内に特集記事の全文と、 簡易表示の両方を予め記載しておき、スタイルシートの display 属性を切り替える事で実現 しています。 コメント内で特集記事の全文が記載されている領域を「詳細表示領域」、リンク先などを簡易 表示している領域を「簡易表示領域」と、呼ぶことにします。 */
$(document).ready(function(){
// 表示制御期間をミリ秒単位で設定。本来24時間に設定するが、テスト用なので10分に設定した
// 24時間にしたい場合は "24 * 60 * 60 * 1000" と、する
var limitTime = 10 * 60 * 1000;
// テキストを非表示にするまでのアクセス数を3に設定
var limitCount = 3;
// 現在時刻を取得
var currentTime = (new Date()).getTime();
// 最後にアクセスした日時を取得。なければ現在時刻から表示制御期間を引いた値を設定
var lastAccessTime = Number(localStorage.getItem("lastAccessTime")) || currentTime - limitTime;
// 最終アクセス日時から表示制御期間が経過していたらカウンタを0にする
if (currentTime - lastAccessTime >= limitTime) {
localStorage.setItem('counter', '0');
}
// カウンタの値を取得
var counter = Number(localStorage.getItem('counter'));
// カウンタに1を加える
counter += 1;
// 特集記事の前後に埋め込まれた、各マーカー要素を求める
var markerA = $('#menu-display-controller-marker-a').parents('.embed')[0];
var markerB = $('#menu-display-controller-marker-b').parents('.embed')[0];
var markerC = $('#menu-display-controller-marker-c').parents('.embed')[0];
// 詳細表示領域内の要素を格納する
var firstDisplayElements = [];
// 簡易表示領域内の要素を格納する
secondDislayElements = [];
// メニュー内の子要素を列挙し、詳細表示領域なのか、簡易表示領域なのかを調査し、
// firstDisplayElements, secondDislayElements に代入する
var stepStatus = 'lookForMarkerA';
$('#menubar').children().each(function(i) {
switch (stepStatus) {
case 'lookForMarkerA':
if (this === markerA) {
stepStatus = 'lookForMarkerB';
}
break;
case 'lookForMarkerB':
if (this === markerB) {
stepStatus = 'lookForMarkerC';
} else {
firstDisplayElements.push(this);
}
break;
case 'lookForMarkerC':
if (this === markerC) {
return false;
} else {
secondDislayElements.push(this);
}
break;
}
});
if (counter <= limitCount) {
// 指定回数のページ遷移、リロードが行われていない時は
// 詳細表示領域を表示し、簡易表示領域を非表示にする。
firstDisplayElements.forEach(function(elm) {
$(elm).show();
});
secondDislayElements.forEach(function(elm) {
$(elm).hide();
});
} else {
// 指定回数のページ遷移、リロードが行われた後は、
// 詳細表示領域を非表示にし、簡易表示領域を表示する。
firstDisplayElements.forEach(function(elm) {
$(elm).hide();
});
secondDislayElements.forEach(function(elm) {
$(elm).show();
});
}
// ちらつき防止のためにデフォルトで非表示にしていたメニューを表示する
$('#menubar').show();
// カウンタと最終アクセス日時を保存
localStorage.setItem('lastAccessTime', currentTime);
localStorage.setItem('counter', counter);
})
定義番号2
div id="menu-display-controller-marker-b"></div>
定義番号3
定義番号2の内容と似ているので注意してください。
div id="menu-display-controller-marker-c"></div>