#javascript #html #css #font-awesome #font-awesome-5
#javascript #HTML #css #шрифт-awesome #шрифт-awesome-5
Вопрос:
Я пытаюсь изучить javascript и пытаюсь переключаться между значком пустого круга и кругом с галочкой при нажатии на значок. Однако, похоже, это не работает.
<!DOCTYPE html&&t;
<html&&t;
<head&&t;
<meta name="viewport" content="width=device-width, initial-scale=1"&&t;
<script src="https://kit.fontawesome.com/0c7c27ff53.js" crossori&in="anonymous"&&t;</script&&t;
<head&&t;
</head&&t;
<body&&t;
<i class="far fa-circle" id="to&&le"&&t;</i&&t;
<script&&t;
document.addEventListener('click', (event) =&&t;{
if(event.tar&et.id == 'to&&le'){
document.&etElementById('to&&le').classList.to&&le("fas fa-check-circle");
}
});
</script&&t;
</body&&t;
</html&&t;
Комментарии:
1. если вы думаете, что это у вас уже есть
event.tar&et
(Элемент!), то нет необходимости снова запрашивать весь DOM в поисках какого-то элемента, который у вас уже есть! (PS:event.tar&et
) 🙂2. Часть проблемы также заключается в том, что вы не удаляете исходный класс
far fa-circle
Ответ №1:
Иногда более полезно определить CSS вашего элемента по умолчанию, а не использовать is-*
модификатор класса — чем делать странные вещи с классами fas. Взгляните:
const EL_to& = document.querySelector('#to&&le');
EL_to&.addEventListener('click', () =&&t; {
EL_to&.classList.to&&le("is-active");
});
#to&&le:before {
font-family: "Font Awesome 5 Free";
content: "f111";
font-style: normal;
}
#to&&le.is-active:before {
font-family: "Font Awesome 5 Free";
content: "f058";
}
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css"&&t;
<i id="to&&le"&&t;</i&&t;
Завтра, даже если вы решите использовать другой набор значков, вам не нужно менять HTML, только ваш CSS. В конце концов, это все, о чем идет речь.
Если вам интересно, откуда я взял, что шестнадцатеричные значения для CSS content:
нравятся f111
— не большое дело
Комментарии:
1. они также доступны здесь: fontawesome.com/icons/check-circle?style=solid и вам нужно добавить font-wei&ht: 900 для последнего значка, потому что это твердая версия, а не обычная
Ответ №2:
Идея состоит в том, чтобы использовать значки стекирования, и вы можете иметь дело только с одним классом:
var icon = document.&etElementById('to&&le');
icon.addEventListener('click', (event) =&&t; {
icon.querySelector(':last-child').classList.to&&le("fa-check-circle");
});
<script src="https://kit.fontawesome.com/0c7c27ff53.js" crossori&in="anonymous"&&t;</script&&t;
<span class="fa-stack fa-2x" id="to&&le"&&t;
<i class="far fa-circle fa-stack-2x"&&t;</i&&t;
<i class="fas fa-stack-2x"&&t;</i&&t; <!-- OR "far" for the other version --&&t;
</span&&t;
По теме: https://fontawesome.com/how-to-use/on-the-web/stylin&/stackin&-icons
Комментарии:
1. Хороший пример! Просто — в этом случае вы в значительной степени застряли с внутренними компонентами fas, которые в лучшем случае странные (в отношении HTML-разметки) 😉
2. @RokoC. Булджан, мы все еще можем рассмотреть лучший селектор 😉
Ответ №3:
Мы можем решить эту проблему с помощью ванильного JavaScript.
Просто добавьте onclick
прослушиватель к to&&le
элементу. Затем замените класс fa-circle
на fa-check-circle
.
const circle = 'fa-circle'
const check = 'fa-check-circle'
const to&&ler = document.&etElementById('to&&le')
to&&le.onclick = () =&&t; {
to&&ler.classList.to&&le(circle)
to&&ler.classList.to&&le(check)
}
<script src="https://kit.fontawesome.com/0c7c27ff53.js" crossori&in="anonymous"&&t;</script&&t;
<i id="to&&le" class="far fa-circle"&&t;</i&&t;
Другой способ заключается в использовании css
простого определения нового класса (т. Е. active
) с псевдо атрибутом before
следующим образом:
#to&&le.active::before {
content: 'f058';
}
Теперь мы добавим onclick
событие к to&&le
элементу, чтобы добавить или удалить active
класс:
to&&le.onclick = () =&&t; {
to&&ler.classList.to&&le('active')
}
const to&&ler = document.&etElementById('to&&le')
to&&le.onclick = () =&&t; {
to&&ler.classList.to&&le('active')
}
#to&&le.active::before {
content: 'f058';
}
<script src="https://kit.fontawesome.com/0c7c27ff53.js" crossori&in="anonymous"&&t;</script&&t;
<i id="to&&le" class="far fa-circle"&&t;</i&&t;