利用JavaScript实现星星评分
- 使用了jQuery,其中实现了星星的动画,使用
animate()
方法. - 其中主要思想就是在给每个span元素使用
text()
插入文本内容时全部添加上active类名,然后使用下面的click()
方法和mouseleave()
来进行星星最终状态是否被点亮,
遇到的问题
- 我的动画是改变了字体大小来实现的大小变化动画
- 其中遇到的问题,如果span元素没有被转化为盒子也就是块状元素,span元素即使转换为行内块元素,并且设定好宽度和高度,span元素的大小也是会跟着
fontsize
属性的值改变而改变,因为所有行内元素都具有一个隐形的空白节点会随着line-height等属性改变进而改变行内元素的大小,建议去看一下张鑫旭的css世界,这里我也解释不清,
- 代码奉上:一定要记得引入jQuery
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
div {
width: 600px;
height: 100px;
margin: 200px auto;
font-size: 50px;
}
span {
display: block;
height: 20px;
text-align: center;
margin-right: 20px;
float: left;
width: 100px;
color: yellow;
}
</style>
</head>
<body>
<div>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</body>
<script>
$('span').text('☆');
$('span').mouseenter(function () {
$('span').text('☆').addClass('active');
$(this).text('★');
$(this).prevAll().text('★');
$(this).nextAll().text('☆');
$(this).animate({
fontSize: 70
}, 'speed')
})
$('span').click(function () {
$(this).removeClass('active');
$(this).prevAll().removeClass('active');
})
$('span').mouseleave(function () {
$(this).animate({
fontSize: 50
}, 'slow')
$('div').mouseleave(function () {
$('.active').text('☆');
})
})
</script>