【问题标题】:Change hover interaction to click for touch screen devices将悬停交互更改为点击触摸屏设备
【发布时间】:2013-10-07 17:33:58
【问题描述】:

我在将鼠标悬停在页面上的另一个元素上时显示内容。在触摸屏上,这需要点击。

我知道 iOS 和 Android 将链接上的悬停操作转换为选项卡操作,但我认为我需要另一种方法,因为我的悬停区域跨越多个块元素,而不仅仅是一个链接。

这就是我所拥有的:

<div>
<h3>Headline</h3>
<div>
<p><img src="http://placehold.it/300x200&text=image" /></p>
<p>I tillegg til sprellende fersk sjømat og sunne ferdigretter, kan vi tilby helnorske produkter fra spennede småprodusenter. <a href="pagename.html">Les mer &gt;></a></p>
</div></div>

div {width:300px; position:relative;}
p {padding-top:10px; margin:0;}
p+p {background:#fff;
display:block; height:100%; width:95%;
position:absolute; left:0; top:0;
opacity:0; transition:.3s ease-in-out opacity;
margin:0; padding:2% 5% 0 0;}

div:hover p+p {opacity:1;}

这里在行动: http://jsfiddle.net/ju6bX/45/

我正在使用 Modernizr,因此“no-touch”类被添加到 HTML 标记中。一旦内容在被选项卡后出现,如果页面上的任何其他内容被选项卡,它应该再次隐藏(访问者不需要能够以任何其他方式关闭它)。

Javascript?

如果设备启用了触摸功能,我想我需要一些 JS 来添加点击功能,但这是我卡住的地方,因为至少可以说我的 Javascript 知识很差。

:焦点?

我不太清楚 :focus 是否适用于我在触摸屏上的场景。只需添加这个伪类就可以解决问题吗?

非常感谢您在这里提供的任何帮助。 (顺便说一句,如果这与任何答案相关,也使用 jQuery)

【问题讨论】:

  • 你用的是modernizr还是什么?
  • @Chad:是的,如前所述,我正在使用 Modernizr。
  • 我已尝试阅读有关使用 :focus 的内容,但我不清楚在触摸屏上按标签时封闭的 DIV 元素是否获得焦点。有什么想法吗?
  • 不要引用我的话,但我认为焦点与表单输入元素(输入、文本区域)有关。

标签: javascript css hover touch


【解决方案1】:

好的,您将需要在执行任何操作之前定义您的事件(您可以基于 no-touch 类执行此操作)。从那里,我只是选择切换一个类,它仍然允许你的 CSS 过渡。

$('body').hasClass('no-touch') ? event = 'mouseenter mouseleave' : event = 'click';
//!$('body').hasClass('no-touch') ? event = 'mouseenter mouseleave' : event = 'click';

$('div div').on(event, function() {
    $(this).find('p + p').toggleClass('open');
});

Fiddle

如果你注释掉第一行然后取消注释第二行,你可以看到这两种方式。

【讨论】:

  • 谢谢你——非常好。你能简单地让我知道这两行之间的区别吗?我可以在该行的开头看到感叹号,似乎使用该行时,我可以将鼠标悬停在非触摸式计算机上,而第一行则不能...只是想仔细检查一下真正了解其中的区别。
  • 当然,这只是一个 if 语句。第一个说如果它有类,第二个说如果它没有类。
  • 谢谢。明天当我手头有触摸屏设备时将对其进行测试。
猜你喜欢
  • 1970-01-01
  • 2014-04-28
  • 2018-10-01
  • 2017-01-12
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2015-08-05
相关资源
最近更新 更多