回答編集履歴
3
誤記
test
CHANGED
@@ -94,11 +94,11 @@
|
|
94
94
|
|
95
95
|
if( parent.hasClass("open") ){ //開いていれば
|
96
96
|
|
97
|
-
$(this).siblings().slideUp( 200 , function(){ parent.removeClass(
|
97
|
+
$(this).siblings().slideUp( 200 , function(){ parent.removeClass("open") });
|
98
98
|
|
99
99
|
}else{ //閉じていれば
|
100
100
|
|
101
|
-
$(this).siblings().slideDown( 200 , function(){ parent.addClass(
|
101
|
+
$(this).siblings().slideDown( 200 , function(){ parent.addClass("open") });
|
102
102
|
|
103
103
|
}
|
104
104
|
|
@@ -116,7 +116,7 @@
|
|
116
116
|
|
117
117
|
if( windowW < 481 ){//画面の横幅が480px以下なら
|
118
118
|
|
119
|
-
dropDownLi(
|
119
|
+
dropDownLi()
|
120
120
|
|
121
121
|
}
|
122
122
|
|
2
追記を追加
test
CHANGED
@@ -28,7 +28,9 @@
|
|
28
28
|
|
29
29
|
// "ul.button-group"をクリックするとその中の"li"が見えるようになって、zIndex+1
|
30
30
|
|
31
|
-
$(this).children(".button").show(0,function(){$(this).css( "zIndex", 1 );open = true;});
|
31
|
+
$(this).children(".button").show(0,function(){$(this).css( "zIndex", 1 );open = true;});
|
32
|
+
|
33
|
+
/*show/hideの数値はdurationなのでお好みの数値を*/
|
32
34
|
|
33
35
|
}
|
34
36
|
|
@@ -46,4 +48,134 @@
|
|
46
48
|
|
47
49
|
- body最後だったので`$(function(){...})`でいいかな…と。(もし全て読み込み後のほうが良ければ$(window).loadでもいいですが、場合によっては結構遅いので…)
|
48
50
|
|
49
|
-
- 単純に表示/非表示を切り替えるだけなら`.toggle()`系のメソッドで書
|
51
|
+
- 単純に表示/非表示を切り替えるだけなら`.toggle()`系のメソッドで書いていいと思います。
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
## 4/3追記:画面リサイズでも動くように
|
62
|
+
|
63
|
+
自分だとこのようにするかな…というコードを記載させていただきます。
|
64
|
+
|
65
|
+
```ここに言語を入力
|
66
|
+
|
67
|
+
(function($){
|
68
|
+
|
69
|
+
var dropDown = false;//liがモバイル(ドロップダウンリスト)状態か判定する用の変数
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
function listOpen(){
|
74
|
+
|
75
|
+
dropDown = false; //ドロップダウン状態をOFF
|
76
|
+
|
77
|
+
$(".button:not(.is-checked)").show();
|
78
|
+
|
79
|
+
$(".button").off(".drop"); //ドロップダウン時に付加したクリックイベントをキャンセル
|
80
|
+
|
81
|
+
}
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
function dropDownLi(){
|
86
|
+
|
87
|
+
dropDown = true; //ドロップダウン状態をON
|
88
|
+
|
89
|
+
$(".button:not(.is-checked)").hide();
|
90
|
+
|
91
|
+
$(".button").on( "click.drop" , function() { //isotopeのクリックイベントと衝突しないように名前空間を使って
|
92
|
+
|
93
|
+
var parent = $(this).parent()
|
94
|
+
|
95
|
+
if( parent.hasClass("open") ){ //開いていれば
|
96
|
+
|
97
|
+
$(this).siblings().slideUp( 200 , function(){ parent.removeClass('open') });
|
98
|
+
|
99
|
+
}else{ //閉じていれば
|
100
|
+
|
101
|
+
$(this).siblings().slideDown( 200 , function(){ parent.addClass('open') });
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
});
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
$(function() {
|
112
|
+
|
113
|
+
var windowW = $(window).width();//画面の横幅を取得
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
if( windowW < 481 ){//画面の横幅が480px以下なら
|
118
|
+
|
119
|
+
dropDownLi(open)
|
120
|
+
|
121
|
+
}
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
$(window).resize(function(){
|
126
|
+
|
127
|
+
//window幅が変化した際にドロップダウン状態か判定し、イベントを分岐
|
128
|
+
|
129
|
+
windowW = $(window).width();
|
130
|
+
|
131
|
+
if(windowW < 481){
|
132
|
+
|
133
|
+
if(dropDown) return; //ドロップダウン状態なら以後の処理を行わない
|
134
|
+
|
135
|
+
dropDownLi()
|
136
|
+
|
137
|
+
}else{
|
138
|
+
|
139
|
+
if(!dropDown) return; //ドロップダウン状態でなければ以後の処理を行わない
|
140
|
+
|
141
|
+
listOpen()
|
142
|
+
|
143
|
+
}
|
144
|
+
|
145
|
+
})
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
});
|
150
|
+
|
151
|
+
})(jQuery);
|
152
|
+
|
153
|
+
```
|
154
|
+
|
155
|
+
グローバルをあまり汚したくなかったので、クロージャにしました。
|
156
|
+
|
157
|
+
windowのresizeイベントに対して、**画面幅によってイベントを分岐させる**という処理を入れると作成できます。
|
158
|
+
|
159
|
+
resizeイベントは画面幅が変わる度に何度も呼び出されるため、記述によってはイベントがどんどん重複してしまいます。
|
160
|
+
|
161
|
+
そのため、今の状態を判別するフラグのようなものを併用して、
|
162
|
+
|
163
|
+
状態が変わるとすぐにフラグを切り替え、それ以後同じイベントが呼ばれないようにしています。
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
また、よくよく考えれば変数の真偽判定だけだと、複数ドロップダウンリストを開いている時の挙動が意図した通りにならないので、親要素へのクラス有無判定に変更しました。
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
- ドロップダウン状態⇔通常 を何度も切り替える事も想定して、それぞれのイベントを関数にまとめました。
|
172
|
+
|
173
|
+
- 親要素であるulにクリックイベントだったのが何だか気持ちが悪かったので、li要素に対してのイベントへ変更。
|
174
|
+
|
175
|
+
- isotope側にもliに対するクリックイベントがあるので、衝突を避けるため、clickイベントに名前空間を利用しました。
|
176
|
+
|
177
|
+
- isotopeがせっかくアニメーションで動くのにドロップダウンリストの動きが無いのはちょっとアンバランスかな、と思ったので、show/hideをslideToggleにしてみました。
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
|
1
誤字の修正
test
CHANGED
@@ -22,17 +22,13 @@
|
|
22
22
|
|
23
23
|
//ドロップダウンリストが開いていたら閉じる
|
24
24
|
|
25
|
-
$(this).children(".button:not(.is-checked)").hide().css( "zIndex", "" );
|
25
|
+
$(this).children(".button:not(.is-checked)").hide(0,function(){$(this).css( "zIndex", "" );open = false;});
|
26
|
-
|
27
|
-
open = false;
|
28
26
|
|
29
27
|
}else{
|
30
28
|
|
31
29
|
// "ul.button-group"をクリックするとその中の"li"が見えるようになって、zIndex+1
|
32
30
|
|
33
|
-
$(this).children(".button").show(0,function(){$(this).css( "zIndex", 1 );});//show()の数値はdurationなのでお好みの数値を
|
31
|
+
$(this).children(".button").show(0,function(){$(this).css( "zIndex", 1 );open = true;});//show()の数値はdurationなのでお好みの数値を
|
34
|
-
|
35
|
-
open = true;
|
36
32
|
|
37
33
|
}
|
38
34
|
|