CSS 设置为 :hover 的关键帧动画不会在移动触摸时停止
CSS keyframe animation which is set on :hover won't stop on mobile touch
我有一个 CSS 关键帧动画设置为发生在 :hover 用作收藏夹按钮的特定图标上。它在桌面上工作得很好,但为 :hover 状态设置的动画关键帧不会在移动设备触摸时停止。如何让它停止移动或不参与移动?
这是代码笔的 link:
http://codepen.io/mapk/pen/ZOQqaQ
HTML:
<div class="fav-btn">
<span href="" class="favme dashicons dashicons-heart"></span>
</div>
CSS:
.fav-btn {
display:flex;
height: 100%;
justify-content: center;
align-items: center;
}
@keyframes favme-anime {
0% {
opacity: 1;
font-size: ms(0);
-webkit-text-stroke-color: transparent;
}
25% {
opacity:.6;
color: #FFF;
font-size: ms(-2);
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #DC3232;
}
75% {
opacity:.6;
color: #FFF;
font-size: ms(3);
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #DC3232;
}
100% {
opacity: 1;
font-size: ms(2);
-webkit-text-stroke-color: transparent;
}
}
@keyframes favme-hover {
from {
font-size: ms(3);
}
80% {
font-size: ms(2);
}
}
.favme {
display:block;
font-size: ms(2);
width: auto;
height: auto;
cursor: pointer;
box-shadow: none;
transition: all .2s ease;
color: #CBCDCE;
margin: 0;
&.active {
color: #DC3232;
}
&:hover {
animation: favme-hover .3s infinite alternate;
}
&.is_animating {
animation: favme-anime .3s;
}
}
jQuery:
// Favorite Button - Heart
$('.favme').click(function() {
$(this).toggleClass('active');
});
/* when a user clicks, toggle the 'is-animating' class */
$(".favme").on('click touchstart', function(){
$(this).toggleClass('is_animating');
});
/*when the animation is over, remove the class*/
$(".favme").on('animationend', function(){
$(this).toggleClass('is_animating');
});
如果你触摸触摸屏上的按钮,它会一直保持悬停状态,直到你触摸到其他任何地方,因此动画不会结束。
您可以尝试使用 javascript 检测移动设备,例如将 no-hover
class 设置为按钮,并在 css 中将 :not('no-hover')
放在 :hover
:
&:not('no-hover'):hover {
animation: favme-hover .3s infinite alternate;
}
我不使用 javascript phone 检测,所以请尝试询问 google,有很多可能性,例如 http://detectmobilebrowsers.com/, https://www.abeautifulsite.net/detecting-mobile-devices-with-javascript/ 或许多其他。
或者使用媒体查询来检测较小的设备并包装 &:hover{some_style}
:
@media (min-width: 600px) {
&:hover {
animation: favme-hover .3s infinite alternate;
}
}
我有一个 CSS 关键帧动画设置为发生在 :hover 用作收藏夹按钮的特定图标上。它在桌面上工作得很好,但为 :hover 状态设置的动画关键帧不会在移动设备触摸时停止。如何让它停止移动或不参与移动?
这是代码笔的 link:
http://codepen.io/mapk/pen/ZOQqaQ
HTML:
<div class="fav-btn">
<span href="" class="favme dashicons dashicons-heart"></span>
</div>
CSS:
.fav-btn {
display:flex;
height: 100%;
justify-content: center;
align-items: center;
}
@keyframes favme-anime {
0% {
opacity: 1;
font-size: ms(0);
-webkit-text-stroke-color: transparent;
}
25% {
opacity:.6;
color: #FFF;
font-size: ms(-2);
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #DC3232;
}
75% {
opacity:.6;
color: #FFF;
font-size: ms(3);
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: #DC3232;
}
100% {
opacity: 1;
font-size: ms(2);
-webkit-text-stroke-color: transparent;
}
}
@keyframes favme-hover {
from {
font-size: ms(3);
}
80% {
font-size: ms(2);
}
}
.favme {
display:block;
font-size: ms(2);
width: auto;
height: auto;
cursor: pointer;
box-shadow: none;
transition: all .2s ease;
color: #CBCDCE;
margin: 0;
&.active {
color: #DC3232;
}
&:hover {
animation: favme-hover .3s infinite alternate;
}
&.is_animating {
animation: favme-anime .3s;
}
}
jQuery:
// Favorite Button - Heart
$('.favme').click(function() {
$(this).toggleClass('active');
});
/* when a user clicks, toggle the 'is-animating' class */
$(".favme").on('click touchstart', function(){
$(this).toggleClass('is_animating');
});
/*when the animation is over, remove the class*/
$(".favme").on('animationend', function(){
$(this).toggleClass('is_animating');
});
如果你触摸触摸屏上的按钮,它会一直保持悬停状态,直到你触摸到其他任何地方,因此动画不会结束。
您可以尝试使用 javascript 检测移动设备,例如将 no-hover
class 设置为按钮,并在 css 中将 :not('no-hover')
放在 :hover
:
&:not('no-hover'):hover {
animation: favme-hover .3s infinite alternate;
}
我不使用 javascript phone 检测,所以请尝试询问 google,有很多可能性,例如 http://detectmobilebrowsers.com/, https://www.abeautifulsite.net/detecting-mobile-devices-with-javascript/ 或许多其他。
或者使用媒体查询来检测较小的设备并包装 &:hover{some_style}
:
@media (min-width: 600px) {
&:hover {
animation: favme-hover .3s infinite alternate;
}
}