jquery (jquery mobile ではない) を実行している 1 ページのスクロール サイトがあります。ドロップ メニュー (順序なしリスト) の表示をトリガーするアンカー リンクがあります。ドロップ メニュー内のリスト項目をクリックすると、関連するスライドがアニメーション表示され、ドロップ メニューが非表示になります。
iOS ブラウザ以外のすべてでうまく機能します。私の問題は、リンクが最初にクリックされたときにしか機能しないことです。
私は、iOS でのマウス クリックとホバー イベントの区別についてよく読みました。解決策はどれもうまくいきません。
私はすべてを試しました:
- #btn_menu 要素をアンカーと div にする
- リンク、li タグ、ラップされた div タグに cursor:pointer スタイルを追加する
- すべてのリスト メニュー項目でアンカー タグをラップする
- タッチ イベントのトリガーに加えて、最初のクリック後に touchend、メニュー クリック イベントなどを起動しようとする
- Hammer.js などのタッチ ライブラリ
シンプルなコード。
$("#btn_menu").on("click touchstart", function(e) {
e.preventDefault();
if ($(".nav_menu").css('display') == 'block') {
$(".nav_menu").css('display','none');
} else {
$(".nav_menu").css('display','block');
}
});
$(".nav_menu ul li").on("click touchstart", function(e) {
e.preventDefault();
$(".nav_menu").css('display','none');
gotoSlide($(this).attr('data-slide'));
//Tried all this:
//$('body').trigger("click touchstart");
//$('#btn_menu').trigger("touchstart touchend touchmove");
//$('#btn_menu').data('clicked', null);
//$('#btn_menu').trigger("mouseout");
});
HTML メニュー:
<a id="btn_menu" href="#" data-role="button">
<span class="menutxt">MENU</span>
</a>
<div class="nav_menu" style="display:none;">
<ul>
<li data-slide="1">Home</li>
<li data-slide="2">slide 1</li>
<li data-slide="3">slide 2</li>
<li data-slide="4">slide 3</li>
</ul>
</div>
**私が知っていることは起こっている**
最初の #btn_menu とそれに続く .nav_menu のクリックのみが完全に機能します。しかし、画面を少しタッチ/移動すると、次の #btn_menu クリックが機能します。#btn_menu のイベント リスナーがクリアされたように見えますか?
ホバー イベントは、最初のクリック後も機能し続けているようで、その後のすべてのクリックに干渉しています。「メニュー」という単語をクリックすると下線が引かれるので、これを知っています - #btn_menu のホバーをリッスンしているイベントをクリアできないようです
私の知恵の終わりに。この種のドロップ メニューの単一ページ サイトで、iOS でクリック イベントを動作させる方法について提案がある人はいますか?
コード内で slicknav.js などのソリューションをテストしましたが、これらも同じ問題を示しています。