Что касается закомментированной функции changeColor, вы должны иметь возможность выполнить ее рефакторинг следующим образом, если вы поместите радугу и сотрете в родительском объекте, чтобы вы могли найти их по имени.
const objects = {erase, rainbox};
function changeColor(str1, str2) {
objects[str1].classList.toggle(str1);
if (objects[str1].className === str1) {
objecs[str2].classList.remove(str2);
main.addEventListener('mouseover', function(){
pickColor('rgb(' + randColor() + ')');
})
}
else {
main.addEventListener('mouseover', function(){
pickColor('#333');
})
}
}
Опять же, как @me_ упоминается в комментарии.Добавление eventListener на каждый клик, скорее всего, не то, что вы хотите.После пятого щелчка у вас будет пять EventListener и пять функций function(){pickColor('rgb(' + randColor() + ')');}
, которые будут вызываться каждый раз, когда вы наводите курсор мыши на «main» (когда-либо расширяющийся для каждого щелчка ...)
(Изменить, потому чтокомментарии настолько ограничены:)
00Saad: я видел, что есть метод removeEventListener (), я бы реализовал его, добавив main.removeEventListener ('mouseover', function () {pickColor ('rgb (')+ randColor () + ')');}) после addEventListener?
Нет, сохранить функцию в переменной, если вы хотите легко удалить ее позже.
function(){...}
<- это фрагмент кода, который создает новую функцию.Так вот: <code>main.removeEventListener('mouseover', function(){...}) создаст новую анонимную функцию и попытается удалить ее из прослушивателей событий main (там, где ее нет).
Кроме того, если вы используете хранимую функцию (const a = function(){..}
)), а затем addEventListener('mouseover', a)
), что своего рода решит проблему, поскольку в любом случае вы не можете привязать одну и ту же функцию к одному и тому же событию несколько раз (это не будет иметь никакого эффекта).
Но тогда следующие addEventListener
-колланы не будут иметь никакого значения, так что в вашем случае было бы гораздо разумнее вывести ваш mouseover-слушатель за пределы changeColor()
.
let isRandomColor = true;
main.addEventListener('mouseover', function(){
pickColor( isRandomColor ? randomColor() : '#333' );
});
function changeColor(){
if (...){
isRandomColor = true;
} else {
isRandomColor = false;
}
}