我如何避免使用此功能重复您的自我规则
How can i avoid the don't repeat your self rule with this function
何开发者,
我想知道您对如何更好地编写这段代码的看法。
如果你点击按钮star3,它会变成黄色的星星下面的星星也是黄色的。 star3上面的星星是灰色的。
这就是我得到的和我需要的,但我想知道我如何才能更有效地编写我的代码..
var star = document.getElementById("star-0");
var star1 = document.getElementById("star-1");
var star2 = document.getElementById("star-2");
var star3 = document.getElementById("star-3");
var star4 = document.getElementById("star-4");
var img = 'url(img/star.png)';
var img2 = 'url(img/star2.png)';
star4.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img2;
star2.style.backgroundImage = img2;
star3.style.backgroundImage = img2;
star4.style.backgroundImage = img2;
});
star3.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img2;
star2.style.backgroundImage = img2;
star3.style.backgroundImage = img2;
star4.style.backgroundImage = img;
});
star2.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img2;
star2.style.backgroundImage = img2;
star3.style.backgroundImage = img;
star4.style.backgroundImage = img;
});
star1.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img2;
star2.style.backgroundImage = img;
star3.style.backgroundImage = img;
star4.style.backgroundImage = img;
});
star.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img;
star2.style.backgroundImage = img;
star3.style.backgroundImage = img;
star4.style.backgroundImage = img;
});
给所有星星一个共同的 class 喜欢 class="stars"
。然后做:
var star1 = document.querySelector('.stars');
从那里您可以将事件侦听器附加到它们,而不是单独写出每个。
在点击监听器内部,将当前事件目标和所有id低于自身的事件目标的背景设置为img2
。
您似乎在尝试实施星级评分。如果您坚持只使用 JS,而不使用 HTML 中的任何智能或元数据。这是我将其简化为的函数:
var star = document.getElementById("star-0");
var star1 = document.getElementById("star-1");
var star2 = document.getElementById("star-2");
var star3 = document.getElementById("star-3");
var star4 = document.getElementById("star-4");
var img = 'url(img/star.png)';
var img2 = 'url(img/star2.png)';
function updateRating(rating) {
var stars = [star, star1, star2, star3, star4];
for(var i = 0; i < stars.length; i++) {
var appliedImage = img;
if ((i + 1) < rating) {
appliedImage = img2;
}
stars[i].style.backgroundImage = appliedImage;
}
}
star4.addEventListener('click', function(){
updateRating(5);
});
star3.addEventListener('click', function(){
updateRating(4);
});
star2.addEventListener('click', function(){
updateRating(3);
});
star1.addEventListener('click', function(){
updateRating(2);
});
star.addEventListener('click', function(){
updateRating(1);
});
使用一个函数添加所有的星星,并用点击事件调用它。传入星星的id。检查 if 语句并在匹配时停止。
何开发者,
我想知道您对如何更好地编写这段代码的看法。
如果你点击按钮star3,它会变成黄色的星星下面的星星也是黄色的。 star3上面的星星是灰色的。
这就是我得到的和我需要的,但我想知道我如何才能更有效地编写我的代码..
var star = document.getElementById("star-0");
var star1 = document.getElementById("star-1");
var star2 = document.getElementById("star-2");
var star3 = document.getElementById("star-3");
var star4 = document.getElementById("star-4");
var img = 'url(img/star.png)';
var img2 = 'url(img/star2.png)';
star4.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img2;
star2.style.backgroundImage = img2;
star3.style.backgroundImage = img2;
star4.style.backgroundImage = img2;
});
star3.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img2;
star2.style.backgroundImage = img2;
star3.style.backgroundImage = img2;
star4.style.backgroundImage = img;
});
star2.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img2;
star2.style.backgroundImage = img2;
star3.style.backgroundImage = img;
star4.style.backgroundImage = img;
});
star1.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img2;
star2.style.backgroundImage = img;
star3.style.backgroundImage = img;
star4.style.backgroundImage = img;
});
star.addEventListener('click', function(){
star.style.backgroundImage = img2;
star1.style.backgroundImage = img;
star2.style.backgroundImage = img;
star3.style.backgroundImage = img;
star4.style.backgroundImage = img;
});
给所有星星一个共同的 class 喜欢 class="stars"
。然后做:
var star1 = document.querySelector('.stars');
从那里您可以将事件侦听器附加到它们,而不是单独写出每个。
在点击监听器内部,将当前事件目标和所有id低于自身的事件目标的背景设置为img2
。
您似乎在尝试实施星级评分。如果您坚持只使用 JS,而不使用 HTML 中的任何智能或元数据。这是我将其简化为的函数:
var star = document.getElementById("star-0");
var star1 = document.getElementById("star-1");
var star2 = document.getElementById("star-2");
var star3 = document.getElementById("star-3");
var star4 = document.getElementById("star-4");
var img = 'url(img/star.png)';
var img2 = 'url(img/star2.png)';
function updateRating(rating) {
var stars = [star, star1, star2, star3, star4];
for(var i = 0; i < stars.length; i++) {
var appliedImage = img;
if ((i + 1) < rating) {
appliedImage = img2;
}
stars[i].style.backgroundImage = appliedImage;
}
}
star4.addEventListener('click', function(){
updateRating(5);
});
star3.addEventListener('click', function(){
updateRating(4);
});
star2.addEventListener('click', function(){
updateRating(3);
});
star1.addEventListener('click', function(){
updateRating(2);
});
star.addEventListener('click', function(){
updateRating(1);
});
使用一个函数添加所有的星星,并用点击事件调用它。传入星星的id。检查 if 语句并在匹配时停止。