以下代码创建了一个没有填充的心脏,必须通过用户单击来填充,但这对我不起作用:
<!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
答案 0 :(得分: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" );
}
}