source: branches/version-2_5-dev/html/user_data/packages/sphone/js/category.js @ 19839

Revision 19839, 4.9 KB checked in by yomoro, 13 years ago (diff)

#880(mobile/sphoneディレクトリを削除)に対応。 img js cssフォルダの移動

Line 
1/*------------------------------------------
2指定されたノードを、オープンまたはクローズする
3------------------------------------------*/
4function openOrClose(tgt){
5    //指定ノードが「hidden」のとき、リストを可視化
6    if(tgt.style.visibility == "hidden"){
7        tgt.style.display = "block";
8        tgt.style.visibility = "visible";
9        tgt.style.height = "auto";
10        tgt.style.paddingTop = "0.25em";
11        tgt.style.lineHeight = "1em"
12        tgt.style.opacity = 1.0;
13    }
14    //指定ノードが「hidden」でないとき、リストを隠す
15    else{
16        tgt.style.display = "none";
17        tgt.style.visibility = "hidden";
18        tgt.style.height = "0px";
19        tgt.style.paddingTop = "0";
20        tgt.style.lineHeight = 0;
21        tgt.style.opacity = 0;
22    }
23}
24
25/*------------------------------------------
26リストープン処理
27------------------------------------------*/
28function listopen(lv, num){
29    var tgt = document.getElementsByClassName("level" + lv)[num];
30    var cnt = 0;
31    //次のレベルをサーチ → 次のレベルのリストをオープンする
32    for(var i=0; i < document.getElementsByClassName("level" + (lv+1)).length; i++){
33        var next_tgt = document.getElementsByClassName("level" + (lv+1))[i];
34        //li
35        if (next_tgt.parentNode == tgt || next_tgt.parentNode.parentNode == tgt){
36            openOrClose(next_tgt);
37            cnt++;
38        }
39    }
40    //次のレベルをサーチ → 表示ボタンの状態を変更
41    for(var i=0; i < tgt.childNodes.length; i++){
42        var next_tgt = tgt.childNodes[i];
43        //ul
44        if(next_tgt.tagName == "UL"){
45        if(next_tgt.style.height == "0px"){
46            //for(var i=0; i<next_tgt.parentNode.childNodes.length; i++){
47                if(event.srcElement.parentNode.className == "category_header plus"){
48                    event.srcElement.innerText = '−';
49                    event.srcElement.parentNode.className = "category_header minus";
50                }
51            //}
52            next_tgt.style.height = "auto"; //1.5*cnt + "em";
53            next_tgt.style.marginTop = 0;
54            next_tgt.style.marginBottom = 0;
55        }
56        else{
57            for(var i=0; i<next_tgt.parentNode.childNodes.length; i++){
58                if(event.srcElement.parentNode.className == "category_header minus"){
59                    event.srcElement.innerText = '+';
60                    event.srcElement.parentNode.className = "category_header plus";
61                }
62            }
63            next_tgt.style.height = "0px";
64            next_tgt.style.marginTop = 0;
65            next_tgt.style.marginBottom = 0;
66        }
67        }
68    }
69}
70
71/*------------------------------------------
72クリックイベントを設定する
73------------------------------------------*/
74function setclickevent(tgt, lv, num){
75    //レベル1以外の時は非表示に
76    if(lv!=1){
77        tgt.style.visibility = "hidden";
78        tgt.style.display = "none";
79        tgt.style.height = "0px";
80        tgt.style.lineHeight = 0;
81        tgt.style.paddingTop = 0;
82        tgt.style.paddingBottom = 0;
83        if(tgt.parentNode.tagName == "UL"){
84            tgt.parentNode.style.height = "0px";
85            tgt.parentNode.style.margin = "0";
86            tgt.parentNode.style.padding = "0";
87            tgt.parentNode.style.border = "none";
88        }
89    }
90    var hasLink_flg;
91    if(tgt.childNodes.length){
92        for (var j = 0; j < tgt.childNodes.length; j++) {
93            //クリック範囲の拡大
94            if(tgt.childNodes[j].tagName == 'A'){
95                tgt.setAttribute('onclick', 'location.href="' + tgt.childNodes[j].getAttribute('href') + '"');
96            }
97            //アコーディオンリストの操作イベント関数を追加
98            else if(tgt.childNodes[j].tagName == 'UL'){
99                //▶を表示し、リストオープン関数を追加
100                var linkObj = document.createElement("a");
101                linkObj.innerText = '+';
102                tgt.childNodes[0].className="category_header plus";
103                tgt.childNodes[0].appendChild(linkObj);
104                j++;
105                linkObj.parentNode.setAttribute('onclick', 'listopen(' + lv + ',' + num + ')');
106
107                //tgt.setAttribute('onclick', 'listopen(' + lv + ',' + num + ')');
108                break;
109            }
110        }
111    }
112}
113
114/*------------------------------------------
115初期化
116------------------------------------------*/
117//level?クラスを持つノード全てを走査し初期化
118function initCategoryList(){
119    var lv = 0;
120    //level?クラスを持つノード全てに、クリックイベントを追加
121    while(document.getElementsByClassName("level" + (++lv)).length){
122        for (var i = 0; i < document.getElementsByClassName("level" + lv).length; i++) {
123            setclickevent(document.getElementsByClassName("level" + lv)[i], lv, i);
124        }
125    }
126}
Note: See TracBrowser for help on using the repository browser.