- ベストアンサー
ウインドウサイズによって関数の実行を制御する方法
- ウインドウサイズが変更された場合、特定の関数を実行しないようにするには、ウインドウサイズを取得し、条件分岐させる必要があります。
- 具体的には、ウインドウサイズを取得し、720px以下であれば特定の関数を実行し、721px以上であれば実行しないようにします。
- ただし、ウインドウサイズが一度720px以下になった後に再度721px以上になる場合、マウスオーバーした際にアラートが表示される問題が発生します。この問題を解決するためには、resizeイベントが連続して発生することが原因です。連続して発生するresizeイベントを制御する方法を考える必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
解決法は二つ リサイズ毎にadjustIconPosを実行することはせず $('.linkOpen').mouseover(function(){ if($(window).width()<=720){ alert('OK'); } }); のように、mouseoverの都度ウィンドウサイズの判定をするか $('.linkOpen').off('mouseover'); if (window_size <= 720) { $('.linkOpen').mouseover(function(){ alert("OK"); }); } のように都度イベントリスナーを取り除いてから 720以下の場合にイベントリスナーを登録するようにするか 後者の場合は、$('.linkOpen')のmouseoverイベントリスナーが すべて取り除かれてしまうので、除去したくない イベントリスナーが同居している、する可能性があるなら 名前空間を指定して任意のものだけを取り除けるように どのみち今はリサイズのたびにmouseoverのイベントリスナーが どんどん増えていく感じになっちゃってるので 今のやり方ではまずいです
その他の回答 (1)
- m-take0220
- ベストアンサー率60% (477/782)
window_sizeが720以下の場合にmouseoverの動作を設定していますが、720を超えている場合には何もしていません。 一旦、window_sizeが720以下にされると、mouseoverの動作が設定され、その後window_sizeが720超に再設定されても、その動作を解除するコードがないため、設定されたmouseoverの動作が有効なままになっています。
お礼
m-take0220様 早速のご回答、どうもありがとうございます。 設定されたmouseoverの動作を解除するコードがない、ということなのですね。 動作が設定されたままで、ということを理解できていなかったので、とても参考になりました。 ご回答いただきましたところ恐縮ですが、ソースにて解決方法をご提示いただきましたH240S18B73様のご回答をベストアンサーとさせていただけますと幸いです。 どうもありがとうございました。
お礼
H240S18B73様 早速のご回答、どうもありがとうございます。 ご提示いただきました2つの解決方法のうち、リサイズ毎にウィンドウサイズの判定を行い、その上で関数を実行することで解決できました。 イベントリスナーが増えていく、という認識がなく、また名前空間もまだあまり理解できていない状態なのですが、思い通りの動きができましたので大変助かりました。 どうもありがとうございました。