J'ai implémenté la flèche "scroll to top" de ce codepen sur mon site Web:
jQuery:
#return-to-top {
position: fixed;
bottom: 20px;
right: 20px;
background: rgb(0, 0, 0);
background: rgba(0, 0, 0, 0.7);
width: 50px;
height: 50px;
display: block;
text-decoration: none;
-webkit-border-radius: 35px;
-moz-border-radius: 35px;
border-radius: 35px;
display: none;
-webkit-transition: all 0.3s linear;
-moz-transition: all 0.3s ease;
-ms-transition: all 0.3s ease;
-o-transition: all 0.3s ease;
transition: all 0.3s ease;
}
#return-to-top i {
color: #fff;
margin: 0;
position: relative;
left: 16px;
top: 13px;
font-size: 19px;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
-ms-transition: all 0.3s ease;
-o-transition: all 0.3s ease;
transition: all 0.3s ease;
}
#return-to-top:hover {
background: rgba(0, 0, 0, 0.9);
}
#return-to-top:hover i {
color: #fff;
top: 5px;
}
CSS:
// ===== Scroll to Top ====
$(window).scroll(function() {
if ($(this).scrollTop() >= 50) { // If page is scrolled more than 50px
$('#return-to-top').fadeIn(200); // Fade in the arrow
} else {
$('#return-to-top').fadeOut(200); // Else fade out the arrow
}
});
$('#return-to-top').click(function() { // When arrow is clicked
$('body,html').animate({
scrollTop : 0 // Scroll to top of body
}, 500);
});
Cela fonctionne bien sur le bureau, mais a un problème sur les écrans de téléphone. Lorsque l'on clique sur la flèche et que l'écran défile vers le haut, si nous faisons défiler à nouveau vers le bas, la flèche s'affiche dans: état de survol.
Comment puis-je "désactiver" le survol après le clic?
EDIT:
Voici un screencast qui montre le problème: https://streamable.com/ 5wr27
4 Réponses :
Essayez simplement javascript:
#return-to-top:focus {
outline: none;
}
OU
$('#return-to-top').click(function() {
$(this).blur();
$('body,html').animate({
scrollTop : 0 // Scroll to top of body
}, 500);
});
CSS:
<a onclick="this.blur();">Top</a>
J'ai essayé cela, malheureusement cela n'a pas aidé.
Je ne pense pas que vous puissiez avoir un effet: hover sur les écrans tactiles.
À la place, peut-être utiliser un sélecteur: actif ou: cliqué dans une requête multimédia
media only screen and (max-width: 600px) {
return-to-top:active {
background: rgba(0, 0, 0, 0.9);
}
}
Peut-être quelque chose comme ça? Vous pouvez rechercher les bonnes largeurs à utiliser.
Ouais, c'est ce qui me trouble. Je l'inspecte actuellement sur Chrome et j'utilise la barre d'outils de l'appareil pour recréer l'écran du téléphone. Une fois que la flèche a été cliquée, et plus tard elle est à nouveau affichée, il semble que tous les styles: hover lui soient appliqués. Je l'ai également testé avec mon téléphone, il en va de même.
J'ai essayé le style: actif pour être le même que l'élément sans: survoler, mais pas de chance.
Je pense que ce qui se passe, c'est que le: hover est toujours attaché donc il est considéré comme survolé. Vous devez donc supprimer le survol. J'ai trouvé que la solution peut être en ajoutant
$(window).scroll(function() {
if ($(this).scrollTop() >= 50) { // If page is scrolled more than 50px
$('#return-to-top').fadeIn(200); // Fade in the arrow
} else {
$('#return-to-top').fadeOut(200);
$('a').die('click');
// Else fade out the arrow
}
});
J'espère que cette solution vous aidera.
$('yourelement').die('click');
Malheureusement, cela n'aide pas non plus. J'ai ajouté un screencast à la question pour qu'elle soit plus claire.
Étant donné que l'état : hover auquel vous faites référence est perdu lorsqu'une souris quitte l'élément, tous les styles appliqués à cet état sont également perdus, ce qui ramène les styles de l'élément à leurs originaux.
Ce comportement ne se produit pas sur l'écran d'un appareil mobile puisque vous devez appuyer dessus avec quelque chose, plutôt que de simplement survoler . Dans ce cas, l'élément conserve les styles appliqués en appuyant dessus, au lieu de les perdre (comme cela se produirait lorsque la souris quitte l'élément).
Tout ce que vous avez à faire est de remettre manuellement l'élément à son état antérieur , pourrait être ceci:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <!-- Return to Top --> <a href="javascript:" id="return-to-top"><i class="icon-chevron-up"></i></a> <!-- ICON NEEDS FONT AWESOME FOR CHEVRON UP ICON --> <link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet"> <!-- Test the scroll --> <div style="height:2000px;"> <h3>Scroll down</h3> <h3><i class="icon-arrow-down"></i> </div>
#return-to-top {
position: fixed;
bottom: 20px;
right: 20px;
background: rgb(0, 0, 0);
background: rgba(0, 0, 0, 0.7);
width: 50px;
height: 50px;
display: block;
text-decoration: none;
-webkit-border-radius: 35px;
-moz-border-radius: 35px;
border-radius: 35px;
display: none;
-webkit-transition: all 0.3s linear;
-moz-transition: all 0.3s ease;
-ms-transition: all 0.3s ease;
-o-transition: all 0.3s ease;
transition: all 0.3s ease;
}
#return-to-top i {
color: #fff;
margin: 0;
position: relative;
left: 16px;
top: 13px;
font-size: 19px;
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
-ms-transition: all 0.3s ease;
-o-transition: all 0.3s ease;
transition: all 0.3s ease;
}
#return-to-top:hover {
background: rgba(0, 0, 0, 0.9);
}
#return-to-top:hover i {
color: #fff;
top: 5px;
}
#return-to-top:not(:focus),
#return-to-top:not(:active) {
background: rgba(0, 0, 0, 0.7);
}
#return-to-top:not(:focus) i,
#return-to-top:not(:active) i {
top: 13px
}
/* Extra Things */
body {
background: #eee;
font-family: 'Open Sans', sans-serif;
}
h3 {
font-size: 30px;
font-weight: 400;
text-align: center;
margin-top: 50px;
}
h3 i {
color: #444;
}
// ===== Scroll to Top ====
$(window).scroll(function() {
if ($(this).scrollTop() >= 50) { // If page is scrolled more than 50px
$('#return-to-top').fadeIn(200); // Fade in the arrow
} else {
$('#return-to-top').fadeOut(200); // Else fade out the arrow
}
});
$('#return-to-top').click(function() { // When arrow is clicked
$('body,html').animate({
scrollTop: 0 // Scroll to top of body
}, 500);
});
Vous pouvez également consulter cette réponse pour appliquer ces styles UNIQUEMENT aux appareils mobiles.
Oui! Merci! J'ai fait défiler la page de haut en bas en essayant différentes choses pendant bien plus d'heures que je ne voudrais l'admettre. Cela a fonctionné.
si tout le reste échoue, essayez peut-être de le supprimer et de le recréer au lieu de le cacher ou d'ajouter
hoverviajQuerypas viaCSS