人々!
ここに聞きに来るのは初めてですが、今まで困った時はいつもここで答えてくれました。まず第一に、この素晴らしいコミュニティに感謝します!
それでは、問題に行きましょう:
window.resizeイベントをチェックするレスポンシブ メニューを実行しています。ブラウザの最小幅に収まると、ボタンのクリック機能が許可されます。ブラウザの幅が大きい場合、クリック機能はバインドされていません。モバイル版のボタンと同じ要素がデスクトップ版の視覚要素であるため、これを行う必要があります。
問題は、私が今持っているコードでは、ページが読み込まれると、クリック機能が正常に動作することです。しかし、ブラウザーのサイズを変更して要素をもう一度クリックすると、状態が複数回トリガーされ、関数がトリガーされていないという印象が残ることがあります。また、ブラウザのサイズを再度変更すると、前回クリックしたときよりもクリック機能がトリガーされます。本当に忌々しい。
何が起こっているのかを理解するのを助けるために、簡単な例を作りました。簡単なコードは次のとおりです(クリック機能の問題を確認するためだけに):
HTML:
<ul>
<li><span class="sub-toggle">Testing 01</span></li>
<li><span class="sub-toggle">Testing 02</span></li>
<li><span class="sub-toggle">Testing 03</span></li>
</ul>
CSS:
.sub-toggle{
display:block;
padding: 20px;
}
.sub-toggle.active{
background-color: #ffcc00;
color: #fff;
}
Javascript (jQuery):
jQuery(function($){
var i = 1;
// check if browser size is compatible with click event
onResize = function() {
// if browser size is ok, do the click function
if($(window).width() <= 480){
// click function
$('.sub-toggle').click(function(){
alert('click');
if($(this).hasClass('active')){
alert('active');
$(this).removeClass('active');
} else {
$(this).addClass('active');
}
});
} else{
// if browser size is greater than expected, unbind the click function
$('.sub-toggle').removeClass('active').unbind('click');
}
// just checking how many times the resize function is triggered
console.log('resize: '+ i);
i++;
}
$(document).ready(onResize);
var timer;
$(window).bind('resize', function(){
timer && clearTimeout(timer);
timer = setTimeout(onResize, 500);
});
});
(一部の不要なコードを削除するために編集されました)
実際の動作を確認したい場合は、Fiddle を作成しました (出力フレームのサイズを変更して動作を確認してください): http://jsfiddle.net/C7ppv/1/
私は JavaScript の知識があまりないので、本当にばかげたことを見落としているのかもしれません。しかし、私がやりたいことは、複数のサイズ変更があっても、クリック イベントを 1 回トリガーすることです。
私の問題をうまく説明できれば幸いです。検索しましたが、この問題の解決策が見つかりませんでした (または、何を探すべきかがよくわからなかっただけかもしれません)。
どんな助けでも大歓迎です!