Mon problème peut paraître simple mais je suis vraiment coincé avec lui. Voici un lien: https://codepen.io/anon/pen/VqyMpj
Le bouton fonctionne à merveille tel quel, mais lorsque vous l'ouvrez sur un mobile et que vous cliquez dessus - il ne fonctionne pas comme sur le bureau, il ne revient pas à sa forme d'origine (reste simplement avec x à la fin).
J'en ai besoin pour fonctionner sur mobile comme sur ordinateur.
Peut-être que le problème vient de setTimeout?
Voici mon code JS: p >
(function () {
var removeSuccess;
removeSuccess = function () {
return $('.btn-cart').removeClass('success');
};
$(document).ready(function () {
return $('.btn-cart').on("click", function () {
$(this).addClass('success');
return setTimeout(removeSuccess, 1000);
});
});
}).call(this);
4 Réponses :
Les appareils mobiles appliquent la pseudo-classe : hover lorsque vous touchez un élément, et ne le supprimez pas tant que vous n'avez pas touché un autre élément.
Merci, j'ai pensé que c'était peut-être le cas. Mais que faire maintenant?
Sur les appareils mobiles, vous avez des événements touch . Vous pouvez utiliser touchend dans de nombreux endroits où vous enregistrez un clic .
Ajoutez un mot-clé touchend aux éléments à vérifier pour dans votre document.ready comme ceci:
$(document).ready(function () {
return $('.btn-cart').on("click touchend", function () {
$(this).addClass('success');
return setTimeout(removeSuccess, 1000);
});
});
Essayez ce code - vous avez des retours étranges dans le vôtre
$(function() { // on page load
$('.btn-cart').on("touchstart click", function() {
$(this).addClass('success');
setTimeout(function() {
$('.btn-cart').removeClass('success');
}, 1000);
});
});
Après quelques essais, voici ce qui a fonctionné pour moi:
function watchForHover() {
var hasHoverClass = false;
var container = document.body;
var lastTouchTime = 0;
function enableHover() {
// filter emulated events coming from touch events
if (new Date() - lastTouchTime < 500) return;
if (hasHoverClass) return;
container.className += ' hasHover';
hasHoverClass = true;
}
function disableHover() {
if (!hasHoverClass) return;
container.className = container.className.replace(' hasHover', '');
hasHoverClass = false;
}
function updateLastTouchTime() {
lastTouchTime = new Date();
}
document.addEventListener('touchstart', updateLastTouchTime, true);
document.addEventListener('touchstart', disableHover, true);
document.addEventListener('mousemove', enableHover, true);
enableHover();
}
Le problème n'a rien à voir avec le code de votre question. Cela dépend entièrement de votre CSS et de votre HTML. Fournissez toujours un exemple minimal reproductible dans la question elle-même .
De plus, vos
retoursn'ont aucun sens