У меня на странице есть 3 кнопки (мужская, женская, не гендерная), которые заставляют персонажей подпрыгивать на странице. В настоящее время, когда пользователь нажимает вторую кнопку, символы первой кнопки продолжают подпрыгивать. Как сделать так, чтобы отскакивали символы только одной кнопки? Код JavaScript ниже:
const allDivs = Array.from(document.querySelectorAll('div'))
const mainHeader = document.querySelector('header')
let maleButton = document.createElement('button')
maleButton.textContent = 'Male Characters'
maleButton.addEventListener('click', () => {
maleCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
//matchedDiv.setAttribute("style", "display: none;")
matchedDiv.className = 'animated infinite bounce delay-2s'
})
});
let femaleButton = document.createElement('button')
femaleButton.textContent = 'Female Characters'
femaleButton.addEventListener('click', () => {
femaleCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
//matchedDiv.setAttribute("style", "display: none;")
matchedDiv.className = 'animated infinite bounce delay-2s;'
})
});
let otherButton = document.createElement('button')
otherButton.textContent = 'Non-Gender Characters'
otherButton.addEventListener('click', () => {
otherCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
//matchedDiv.setAttribute("style", "display: none;")
matchedDiv.className = 'animated infinite bounce delay-2s;'
})
});
mainHeader.appendChild(maleButton)
mainHeader.appendChild(femaleButton)
mainHeader.appendChild(otherButton)
2 ответа
Вам нужно использовать "this", если ваши кнопки в "div", попробуйте написать:
this.parentElement.className = 'animated infinite bounce delay-2s;
Вместо того:
matchedDiv.className = 'animated infinite bounce delay-2s;'
Это грубо, потому что у меня нет полного кода, но примерно так:
const allDivs = Array.from(document.querySelectorAll('div'))
const mainHeader = document.querySelector('header')
function clearAnimations() {
[maleCharacters, femaleCharacters, otherCharacters].forEach(c =>
c.forEach(character => allDivs.find((oneDiv) =>
oneDiv.firstChild.textContent === character.name).className = '';
});
}
let maleButton = document.createElement('button')
maleButton.textContent = 'Male Characters'
maleButton.addEventListener('click', () => {
clearAnimations();
maleCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
//matchedDiv.setAttribute("style", "display: none;")
matchedDiv.className = 'animated infinite bounce delay-2s'
})
});
let femaleButton = document.createElement('button')
femaleButton.textContent = 'Female Characters'
femaleButton.addEventListener('click', () => {
clearAnimations();
femaleCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
//matchedDiv.setAttribute("style", "display: none;")
matchedDiv.className = 'animated infinite bounce delay-2s;'
})
});
let otherButton = document.createElement('button')
otherButton.textContent = 'Non-Gender Characters'
otherButton.addEventListener('click', () => {
clearAnimations();
otherCharacters.forEach(character => {
let matchedDiv = allDivs.find((oneDiv) => {
return oneDiv.firstChild.textContent === character.name
})
//matchedDiv.setAttribute("style", "display: none;")
matchedDiv.className = 'animated infinite bounce delay-2s;'
})
});
mainHeader.appendChild(maleButton)
mainHeader.appendChild(femaleButton)
mainHeader.appendChild(otherButton)
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.