我有一个运行 jquery(不是 jquery mobile)的单页滚动站点我有一个触发下拉菜单(无序列表)显示的锚链接。单击下拉菜单中的列表项会以动画方式显示关联的幻灯片,并隐藏下拉菜单。
适用于除 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 li 单击才能完美运行。但是,如果我随后轻轻触摸/移动屏幕,则进行中的 #btn_menu 单击会起作用。#btn_menu 上的事件监听器似乎被清除了?
悬停事件似乎在第一次点击后继续工作,并干扰所有正在进行的点击。我知道这一点,因为当我单击“菜单”这个词时,它会带有下划线 - 我似乎无法清除监听 #btn_menu 悬停的事件
在我的智慧结束。有没有人对我如何在单页网站上为这种下拉菜单获取在 iOS 上运行的点击事件有任何建议?
我在我的代码中测试了像 slicknav.js 这样的解决方案,但这些也表现出同样的问题。