[英]jQuery: fadeIn / fadeOut on hover - alternatives on mobile devices?
我在jQuery中使用fadeIn和fadeOut,它在桌面上可以正常工作。 但是,在移动设备上(虽然我仅在iPhone上进行过测试),子div可以在触摸时打开,但在触摸外部元素后不会隐藏。 我对jQuery很陌生,所以我不确定在这里可以实现哪种解决方案。 也许是移动检测并执行触摸以打开/隐藏,尽管我不知道该怎么做。 这是我的JSFiddle:
https://jsfiddle.net/9LL3mmzt/
jQuery的:
$(document).ready(function() {
$(".parent").hover(function() {
$(this).children(".child").fadeIn("fast");
}, function() {
$(this).children(".child").fadeOut("fast");
});
});
HTML:
<div class="parent">
<span>Peek-A-</span>
<div class="child">
<span>Boo</span>
</div>
</div>
CSS:
.child {
display: none;
}
我尝试了此线程的第一个解决方案: jQuery悬停功能超时
但是,由于我的知识有限,我无法使其正常运行。
悬停功能并不是您应该在触摸设备上真正使用的功能。 我认为您需要检查一下touchstart功能。
编辑1:一个例子是这样的:
$('div.example').on("touchstart", function (e) {
alert('testing');
});
但请记住,您仍然可以使用悬停JavaScript,但是必须指定此选项仅在非触摸设备上使用。 参见Modernizr 。
希望这可以帮助。
仅供参考,@ James Douglas,您可以看到由于我的声誉得分,我无法发表任何评论。 如果可能的话,请发表评论或帮助我们找到这个问题的答案,我认为这会更有用。
编辑2:Modernizr非常方便。 在您的情况下,您将获得类别触摸还是非触摸(在html元素上),具体取决于您使用的设备。
所以在我的示例中,您可以将其用作$('。touch div.example')...
可能会有不同的解决方案,但是我认为这是最好的方法(另请参见使用JavaScript检测“触摸屏”设备的最好方法是什么? )。 您只需要将de modernizr.js文件添加到您的网站(最好在网页顶部)。
编辑3:我已经在iPhone和Android上测试了您的jsfiddle示例,并且可以正常工作。 所以对我来说这是一个好习惯。
我可以使用@Nick帖子中的示例以及我在OP中链接的线程的解决方案(至少在iPhone上)使此工作有效:
这是JSFiddle: https ://jsfiddle.net/tkeaoffd/
JQuery的:
$(document).ready(function() {
function hasTouch() {
try {
document.createEvent("TouchEvent");
return (true);
} catch (e) {
return (false);
}
}
var touchPresent = hasTouch();
$('.parent').hover(function() {
var caption = $(this).find('.child');
caption.stop(true, true).fadeIn("fast");
if (touchPresent) {
$('.parent').on("touchstart", function(e) {
$(this).children(".child").fadeToggle("fast");
});
}
}, function() {
$(this).find('.child').stop(true, true).fadeOut("fast");
});
});
HTML / CSS:
<div class="parent">
<span>Peek-A-</span>
<div class="child">
<span>Boo</span>
</div>
</div>
.child {
display: none;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.