ios端末でスライドメニューの開閉の際、領域外のタップで閉じたいのですが、
on clickであれば問題なく動作しても、hammer.jsを使用した際のtapでは開いた瞬間に閉じてしまい困っています。
■追記
.hammer().on("tap touchstart")とすることで、領域外のタップで閉じるようになりました。ただ、tapも動作してしまうので挙動は怪しいです。
ifで"tap"と"touchstart"の振り分けをしようと思いましたが、iosではtapもtouchstartも動いてしまうので、別の事で振り分けないとダメそうです。
$("body").hammer().on("tap", function() { $(".casemenu").slideUp(); });
上記ではPCで確認した際、chromeのみ開いた瞬間に閉じてしまいましたので、
$("body").hammer().on("tap", function(e) { if (!$(e.target).closest('.casemenu').length) { $(".casemenu").slideUp(); }
上記の様にしたところ、chromeでも正常に動作し、PCでは問題ありませんが、ios safariとios firefoxで確認したら、タップした瞬間に閉じられてしまいます。
ボタンをタップした時にbodyにも伝達されているのが問題だと思うのですが、iosに対応するにはどうしたらよいのでしょうか。
もしわかる方がいらっしゃいましたらお教え頂けると幸いです。
よろしくお願い致します。
■追記
https://jsfiddle.net/nyamo/szL8jq7m/1/
クリックの場合は、ボタン>bodyの順でios以外閉じます。
javascript
1$(".casebutton").on("click", function(e){ 2$(".casemenu").hide(); 3$(this).parents(".all").children(".casemenu").slideDown("fast"); 4return false; 5}); 6// クリックでスライドを閉じる 7$("body").on("click", function(e) { 8if (!$(e.target).closest('.casemenu').length) { 9$(".casemenu").slideUp("fast"); 10} 11});
ですが、.hammer().on("tap")では、body>ボタンの順にしなければios以外閉じれないのも気になるところです。どちらも結局、iosで閉じれないので意味のない事ですが・・・。
javascript
1// クリックでスライドを閉じる 2$("body").hammer().on("tap", function(e) { 3if (!$(e.target).closest('.casemenu').length) { 4$(".casemenu").slideUp("fast"); 5} 6}); 7 8$(".casebutton").hammer().on("tap", function(ev){ 9$(".casemenu").hide(); 10$(this).parents(".all").children(".casemenu").slideDown("fast"); 11return false; 12});
html
1<header> 2ヘッダー 3</header> 4<body> 5<div class="all"> 6<div class="case"> 7<button type="button" class="casebutton">選択</button> 8</div> 9<div class="casemenu"> 10<label class="caseradio"><input type="radio"/>ああああ</label> 11<label class="caseradio"><input type="radio"/>いいいい</label> 12<label class="caseradio"><input type="radio"/>うううう</label> 13<label class="caseradio"><input type="radio"/>ええええ</label> 14</div> 15</div> 16</body>
css
1.casemenu { 2 display: none; 3 background-color: #000; 4 border: 1px solid #000; 5 width: 100px; 6} 7.caseradio { 8 display: block; 9 margin-bottom: 1px; 10 text-align: left; 11 background-color: #fff; 12}
javascript
1$(".casebutton").hammer().on("tap", function(){ 2$(".casemenu").hide(); 3$(this).parents(".all").children(".casemenu").slideDown(); 4return false; 5}); 6$("body").hammer().on("tap", function() { 7$(".casemenu").slideUp(); 8});
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/08 09:58
2016/06/08 15:02
2016/06/08 18:10
2016/06/08 18:59
2016/06/08 19:08
2016/06/09 10:06
2016/06/09 13:42 編集