安装环境
npm install -g http-server
启动http服务
http-server .
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Rating App</title>
<style>
.star-rater .star {
font-size: 5rem;
color: gray;
}
</style>
</head>
<body>
<h2>Rating App</h2>
<div class="star-rater" id="rater-1" data-rating="1" role="rater">
<span class="star" data-value="1">★</span>
<span class="star" data-value="2">★</span>
<span class="star" data-value="3">★</span>
<span class="star" data-value="4">★</span>
<span class="star" data-value="5">★</span>
</div>
<div class="star-rater" id="rater-1" data-rating="3" role="rater">
<span class="star" data-value="1">★</span>
<span class="star" data-value="2">★</span>
<span class="star" data-value="3">★</span>
<span class="star" data-value="4">★</span>
<span class="star" data-value="5">★</span>
</div>
<script type="module" src="js/main.js"></script>
</body>
</html>
- type=module,这样,浏览器就能解析代码中的module语法。
main.js
import { Rater } from "./rater.js";
document.addEventListener('DOMContentLoaded',function(){
const raters=document.querySelectorAll('.star-rater');
raters.forEach(rater=>{
new Rater(rater);
});
});
- 当初始的 HTML 文档被完全加载和解析完成之后,
DOMContentLoaded
事件被触发,而无需等待样式表、图像和子框架的完全加载。
rater.js
export function Rater(ratingElement) {
const resetRating=ev=>{
const numRating=ratingElement.getAttribute('data-rating');
highlightRating(numRating);
}
const ratingHover=ev=>{
const currentHover=ev.currentTarget.getAttribute('data-value');
highlightRating(currentHover);
}
const stars = ratingElement.querySelectorAll('.star');
const highlightRating=(numRating)=>{
stars.forEach(star=>{
star.style.color=
numRating >= star.getAttribute('data-value')?'yellow':'gray';
})
}
const setRating=ev=>{
const currentClick=ev.currentTarget.getAttribute('data-value');
ratingElement.setAttribute('data-rating',currentClick);
}
resetRating();
stars.forEach(star=>{
star.addEventListener('click',setRating)
star.addEventListener('mouseover',ratingHover);
})
ratingElement.addEventListener('mouseout',resetRating);
}
实现效果
