悬停 CSS 上的 iPad/iPhone 触摸事件

Posted

技术标签:

【中文标题】悬停 CSS 上的 iPad/iPhone 触摸事件【英文标题】:iPad/iPhone Touch Event on Hover CSS 【发布时间】:2011-10-05 00:42:25 【问题描述】:

我有一个像这样设置的简单菜单:

  <ul>
   <li>Item </li>
   <li>Item </li>
    <li>Item </li>
  </ul>

当您将鼠标悬停在计算机上的项目上时,它会显示其他 &lt;ul&gt;&lt;li&gt; 项目正常。在 i 设备上,如果您触摸该项目,它不会做任何事情。我的第一个 &lt;li&gt; 有一个称为标志性作品的图像完美,但我不知道为什么它有效而其他人没有。

http://jsfiddle.net/5v9nc/

感谢您的帮助。

我试过这个:

http://blog.0100.tv/2010/05/fixing-the-hover-event-on-the-ipadiphoneipod/

但这并没有帮助。请帮忙!我已经尝试了以下建议,但它不适用于我的小提琴示例。

【问题讨论】:

***.com/questions/3501586/… @BNL 没用。我试过了。 您为什么不检查用户是否在移动设备上,如果是,您将悬停事件更改为点击事件?如果用户再次“点击”,则继续使用相同的代码。 【参考方案1】:

我知道了。添加

<a href='#'>(your menu header)</a>

到父 &lt;ul&gt; 中的所有 &lt;li&gt;。不需要 jQuery/JS。

【讨论】:

谢谢!它让我 4 岁的吸盘鱼钻头在 iPad 上工作得像冠军一样。 我用我的 android 手机(使用股票浏览器)尝试了有问题的 jsfiddle,它按预期工作。但是为了让它与 ios 一起工作,你还需要添加锚元素吗?当我添加&lt;a href="#"&gt;....&lt;/a&gt; 时,该菜单现在在标题与其元素之间存在间隙。您能否提供一个更新的 jsfiddle 来显示一个工作示例,仅供参考?【参考方案2】:

我遇到了同样的问题,在查看了您的解决方案后,我尝试了一些非常简单但有效的方法,所以我想我会分享它。

为了重申这个问题,我有 CSS 菜单,将鼠标悬停在菜单项上会显示子菜单项。在没有悬停的 iPad 上,单击菜单项在某些情况下会显示子菜单,而在其他情况下则不会。

不管它在哪里不起作用,我只需将onclick="return true" 添加到&lt;li&gt;,然后它就起作用了。

【讨论】:

谢谢你!从那以后我就知道了,但我相信如果你在 中添加一个 ,它会起作用。我认为我的 html 错误, 【参考方案3】:

您可以尝试使用 touchstart 或 touchend,这可能是更好的方法,具体取决于您要完成的任务。

//ipad and iphone fix
// using jQuery 1.7.x (on method instead bind)
if ( (navigator.userAgent.match(/iPhone/i)) 
   || (navigator.userAgent.match(/iPod/i) ) 
   || (navigator.userAgent.match(/iPad/i))) 

      $(".menu li a").on('touchstart', function() 
           console.log("touch started");
      );
      $(".menu li a").on('touchend', function()
           console.log("touch ended");
      );

参考:http://blog.0100.tv/2010/05/fixing-the-hover-event-on-the-ipadiphoneipod/

【讨论】:

没用。。我试过了。我的 ul 在我最上面的 li 显示中:无。在悬停时我有一个显示:块。【参考方案4】:

Terraling 使用 onclick="return true" 的解决方案对我很有帮助。我通过在 JQuery 中使用一行将其添加到我的导航列表中的所有 li 元素使其更加优雅,这使原始 HTML 保持美观和整洁。在 iPhone 和 iPad 上的 iOS 5.1 上对其进行了测试。

$("ul#bars li").attr("onclick","return true");

【讨论】:

【参考方案5】:

不需要 jquery 或 javascript。只需 html/css:

        <div id="header">
            <ul id="nav">
                <li><a href="something">something</a></li>
                <li><a href="something">something</a>
                    <div class="drop">
                        <ul>
                            <li><a href="something">something</a></li>
                            <li><a href="something">something</a></li>
                        </ul>
                    </div> <!-- /.drop -->
                </li>
                <li><a href="something">something</a></li>
                <li><a href="something">something</a></li>
            </ul>
        </div> <!-- /#header -->

以及控制它的 CSS:

.drop ul:after,
#nav:after

    content:'';
    display:block;
    clear:both;

#nav li

    position:relative;
    width:25%;
    float:left;
    padding:16px 0 0 0;
    background:url(../images/separator.gif) no-repeat;
    letter-spacing:1px;
    word-spacing: -1px;
    text-align:center;

#nav li:first-child,
#nav li.first-child

    background:none;

#nav a

    color:#E39916;
    padding:0 0 13px;
    display:block;

#nav a:hover

    color:#37ABD6;

#nav li:hover,
#nav li.hover

    position:relative;

#nav li:hover .drop .drop,
#nav li.hover .drop .drop

    display:none;

#nav li:hover .drop,
#nav li.hover .drop,
#nav li .drop li:hover .drop,
#nav li .drop li.hover .drop

    display:block;

#nav .drop li:hover .drop .drop,
#nav .drop li.hover .drop .drop

    display:none;

#nav .drop .drop li:hover .drop,
#nav .drop .drop li.hover .drop

    display:block;

.drop

    position:absolute;
    left:1px;
    top:50px;
    background-color:#E8F7FF;
    border:1px solid #fff;
    border-width:1px 1px 0;
    width:90%;
    min-width:115px;
    display:none;

.drop .drop

    left:95%;
    top:2px;
    z-index:9999;

.drop-left

    left:-95% !important;
    top:2px;
    z-index:9999;

.drop ul

    margin:0;
    padding:0;
    list-style:none;
    width:100%;

#nav .drop li

    margin:0;
    padding:0;
    background:none;
    font-size:13px;
    line-height:14px;
    border-bottom:1px solid #fff;
    float:left;
    width:100%;
    letter-spacing:1px;

#nav .drop li .drop li a,
#nav li .drop a

    text-decoration:none;
    background:none;
    display:block;
    color:#1C9CCB;
    padding:5px 5px 4px 5px;
    height:1%;

#nav .drop li .drop li a:hover,
#nav .drop li:hover a,
#nav .drop li.hover a,
#nav .drop a:hover

    background:#F9EFD1;
    color:#D88F0E;
    text-decoration:none;

#nav .drop .drop a

    padding-left:8px !important;

#main

    width:100%;
    overflow:hidden;
    margin:0 0 -391px;
    padding:10px 0 0 0;
    position:relative;

【讨论】:

【参考方案6】:

HTML:

<ul>
  <li class="main_menu_item"><a href="/">Page</a></li>
  <li class="main_menu_item"><a href="/">Page</a>
    <ul class="sub_menu">
      <li><a href="/">Page</a></li>
    </ul>
  </li>
</ul>

jQuery:

$(document).ready(function() 
    if ( (navigator.userAgent.match(/iPhone/i)) 
    || (navigator.userAgent.match(/iPod/i) ) 
    || (navigator.userAgent.match(/iPad/i))) 
        $('.main_menu_item').bind('mouseenter', function(e) 
            $(this).find('.sub_menu').show();
            $(this).find('.sub_menu').css('visibility','visible');
        );
        $('.main_menu_item').bind('mouseleave', function(e) 
            $(this).find('.sub_menu').hide();
        );
    
);

【讨论】:

以上是关于悬停 CSS 上的 iPad/iPhone 触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

触摸屏设备上的 CSS 悬停不会被忽略

CSS:触摸屏设备上的悬停行为

jQuery superfish 菜单/悬停在 iPad、iPhone 等

iPad/iPhone 上的 CSS 问题

在 iPad/iPhone 上的 CSS 提交按钮奇怪的渲染

修复 iPhone/iPad/iPod 上的 CSS 悬停