【问题标题】:How can I add click events with JavaScript (or CSS) on iOS devices?如何在 iOS 设备上使用 JavaScript(或 CSS)添加点击事件?
【发布时间】:2015-03-30 05:29:20
【问题描述】:

我在尝试在网站上实施悬停技术时遇到问题。基本上,我有div (.portfolio-item) 用于显示background-image.portfolio-item 包含一个直接子元素——<div class="portfolio-item-info">,它是绝对定位的,仅当用户将鼠标悬停在父元素上时才会显示。

这在笔记本电脑和 Android 设备上运行良好,但对于 iOS 设备则根本不起作用。因此,如果用户触摸.portfolio-item div,则不会发生任何事情。

HTML

<div class="portfolio-item" style="background-image: url('path/to/url')">
    <div class="portfolio-item-info">
        <h3 class="font-secondary-bold">Some Title</h3>
        <ul class="list-unstyled list-inline">
            <li>Publication</li>
            <li>Print</li>
        </ul>
        <a href="#">Take a look</a>
    </div>
</div>

CSS

.portfolio-item {
    background-color: #fff;
    background-size: cover;
    margin-bottom: 24px;
    overflow: hidden;
    position: relative;
    min-height: $portfolioItemHeight;

    &:before {
        content: "";
        background-color: $colorLight;
        background-color: rgba(255, 255, 255, 0.8);
        min-height: $portfolioItemHeight;
        opacity: 0;
        position: absolute;
        left: 0;
        right: 0;
        transition: opacity 0.5s ease-in-out;
    }

    &:hover,
    &:focus {

        &:before {
            opacity: 1;
        }

        .portfolio-item-info {
            top: 0;
        }
    }
}

为了让它发挥作用,我使用了一些非常老套的东西,我在 .portfolio-item div 上添加了一个 onclick 属性,例如

<div class="portfolio-item" onclick="void(0)" style="background-image: url('path/to/url')">

这个 hacky 解决方案确实有效,但理想情况下我希望少一些……hacky

【问题讨论】:

标签: javascript html ios css


【解决方案1】:

没有标准定义触摸设备应如何处理悬停,这取决于浏览器供应商,因此任何解决方案都将是一种“黑客”。但是,以下一种更可靠:

使用 jQuery,您可以在触摸开始/结束时打开/关闭类 hover

$(document).ready(function() {
    $('.portfolio-item').bind('touchstart touchend', function(e) {
        e.preventDefault();
        $(this).toggleClass('hover');
    });
});

在 CSS 中添加 .hover 类,其参数与现有 :hover 相同。

【讨论】:

  • 像魅力一样工作。非常感谢!
  • 嗨,Alexander,不幸的是,我发现这仅适用于 iOS 8 :-( 在 iOS 7.1 中,悬停类仅在您触摸时添加 - 这意味着您必须按下并按住.portfolio-item.portfolio-item-info 出现。在iOS 8 上,我点击一次,.portfolio-item-info 出现,然后一直停留直到我再次点击。iOS 7.1 和iOS 8 的JS 有什么区别。
  • P.S.为了避免混淆,我总是在 iOS 的 Mobile Safari 上进行测试。
  • 是的,iOS 7 需要“触摸并按住”。在 iOS 8 中它得到了改进 :)
  • 看来onclick="void(0)" 方法是Apple 的Safari Web 内容指南developer.apple.com/library/safari/documentation/… 上推荐的方法@
猜你喜欢
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多