1
votes

Comment supprimer: passez la souris sur les téléphones après avoir cliqué sur

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


1 commentaires

si tout le reste échoue, essayez peut-être de le supprimer et de le recréer au lieu de le cacher ou d'ajouter hover via jQuery pas via CSS


4 Réponses :


0
votes

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>


1 commentaires

J'ai essayé cela, malheureusement cela n'a pas aidé.



0
votes

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.


2 commentaires

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.



0
votes

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');


1 commentaires

Malheureusement, cela n'aide pas non plus. J'ai ajouté un screencast à la question pour qu'elle soit plus claire.



1
votes

É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.


1 commentaires

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é.