可点击的fa-heart-o fontawesome不工作

问题描述 投票:0回答:1

下面的代码创建一个没有填充的心脏,它必须由用户点击填写,但这段代码不适合我:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
.fa {
  font-size: 50px;
  cursor: pointer;
  user-select:none ;
}

.fa:hover {
  color: darkblue;
}
</style>
</head>
<body>

<p>Click on the icon to toggle between heart </p>

<i onclick="myFunction(this)" class="fa fa-heart-o"></i>

<script>
function myFunction(x) {
  x.classList.toggle("fa-heart");
}
</script>

</body>
</html>

但如果改变了

<i onclick="myFunction(this)" class="fa fa-heart-o"></i>
...
x.classList.toggle("fa-heart");

对此

<i onclick="myFunction(this)" class="fa fa-heart"></i>
...
x.classList.toggle("fa-heart-o");

有效。我想先显示fa-heart-o,然后在用户点击后填写并更改为fa-heart

javascript css html5
1个回答
1
投票

ClassList toggling实际上只是在你使用单一课程时使用。切换时,如果指定的类存在,那么它将被删除,否则将被添加。目前你的元素将始终具有fa-heart-o类,并且您尝试添加fa-heart类来覆盖它。

在FontAwesome中,fa-heart-o类是在fa-heart类之后定义的。因此,fa-heart-o将始终覆盖fa-heart,否则,它们具有相同的特异性。有关更多信息,请参阅MDN article

在您的情况下,您需要删除一个类并添加另一个类,而不是切换单个类。

您的脚本可能如下所示:

function myFunction(x) {
    if ( x.classList.contains( "fa-heart") ) {
        x.classList.remove( "fa-heart" );
        x.classList.add( "fa-heart-o" );
    }
    else {
        x.classList.remove( "fa-heart-o" );
        x.classList.add( "fa-heart" );
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.