下面的代码创建一个没有填充的心脏,它必须由用户点击填写,但这段代码不适合我:
<!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
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" );
}
}