Mit Inspiration von MacFreak habe ich etwas zusammengestellt, das für mich funktioniert.
Diese js-Methode verhindert, dass Hover auf einem iPad hängen bleibt, und verhindert, dass der Klick in einigen Fällen als zwei Klicks registriert wird. Wenn Sie in Ihrem CSS irgendwelche :hover psudo-Klassen haben, ändern Sie sie in .hover Zum Beispiel .some-class:hover in .some-class.hover
Testen Sie diesen Code auf einem iPad, um zu sehen, wie sich die css- und js-Hover-Methode unterschiedlich verhalten (nur beim Hover-Effekt). Die CSS-Schaltfläche hat keinen ausgefallenen Klick-Alarm. http://jsfiddle.net/bensontrent/ctgr6stm/
function clicker(id, doStuff) {
id.on('touchstart', function(e) {
id.addClass('hover');
}).on('touchmove', function(e) {
id.removeClass('hover');
}).mouseenter(function(e) {
id.addClass('hover');
}).mouseleave(function(e) {
id.removeClass('hover');
}).click(function(e) {
id.removeClass('hover');
//It's clicked. Do Something
doStuff(id);
});
}
function doStuff(id) {
//Do Stuff
$('#clicked-alert').fadeIn(function() {
$(this).fadeOut();
});
}
clicker($('#unique-id'), doStuff);
button {
display: block;
margin: 20px;
padding: 10px;
-webkit-appearance: none;
touch-action: manipulation;
}
.hover {
background: yellow;
}
.btn:active {
background: red;
}
.cssonly:hover {
background: yellow;
}
.cssonly:active {
background: red;
}
#clicked-alert {
display: none;
}
<button id="unique-id" class="btn">JS Hover for Mobile devices<span id="clicked-alert"> Clicked</span>
</button>
<button class="cssonly">CSS Only Button</button>
<br>This js method prevents hover from sticking on an ipad, and prevents the click registering as two clicks. In CSS, if you have any :hover in your css, change them to .hover For example .some-class:hover to .some-class.hover