В этом кратком руководстве вы узнаете, как создавать различные типы кнопок-переключателей, например:
- Переключить один класс внутри одной кнопки
- Переключить два класса внутри одной кнопки
- Переключение одного класса между двумя разными кнопками
Переключить один класс внутри одной кнопки
В шаблоне Vue у меня есть простая кнопка с некоторыми классами Semantic UI CSS framework: кнопка переключения пользовательского интерфейса, которая предназначена только для визуальных целей.
<button class="ui button toggle">OFF</button>
На этом этапе кнопка имеет серый цвет фона, как на скриншоте ниже.
На этом этапе переключение класса active на кнопку изменит цвет фона с серого на зеленый и наоборот.
Довольно прямолинейно.
Для этого нам нужно иметь свойство с логическим значением, и при каждом нажатии кнопки нам нужно менять состояние этого свойства.
Исходя из этого, мы можем определить, когда активный класс должен быть добавлен к кнопке.
Давайте определим свойство с именем isActive внутри модели data().
export default {
data() {
return {
isActive: false,
};
},
};
Затем прикрепите к кнопке событие щелчка, чтобы мы могли изменять состояние свойства isActive при каждом нажатии.
<button class="ui button toggle" @click="toggle">OFF</button>
Вызовите функцию обратного вызова toggle() внутри объекта методов.
Установите для свойства isActive значение true, если оно false, и наоборот.
Это можно сделать несколькими способами.
Наивный подход будет таким:
toggle() {
if (!this.isActive) {
this.isActive = true;
} else {
this.isActive = false;
}
},
Причина, по которой я сначала проверяю, является ли this.isActive ложным, заключается в том, что это его начальное значение.
Но тернарный оператор сделал бы его менее загроможденным.
toggle() {
this.isActive = this.isActive ? false : true;
},
Это хорошо, но мы все еще можем сделать это лучше.
toggle() {
this.isActive = !this.enable;
},
Это выглядит красиво.
На самом деле вы можете добавить этот код в кнопку, как в коде ниже.
<button class="ui button toggle" @click="isActive = !isActive">OFF</button>
Переключить активный класс CSS
Основываясь на свойстве isActive, давайте переключим класс active в элементе кнопки, добавив объект в :класс.
<button class="ui button toggle" :class="{active:isActive}" @click="isActive = !isActive">OFF</button>
Класс active, который является ключом объекта, будет добавлен к кнопке, когда для isActive установлено значение true, которое является значением объекта.
Хороший.
Текст кнопки переключения
Давайте поменяем текст между OFF и ON в зависимости от значения свойства isActive.
<button
class="ui button big toggle"
:class="{active:isActive}"
@click="toggle"
>{{isActive ? 'ON' : 'OFF'}}</button>
Переключить два класса внутри одной кнопки
Допустим, вы хотите, чтобы кнопка имела красный цвет фона, когда она выключена, и зеленый, когда она включена.
В этом случае все, что нам нужно сделать, это добавить массив вместо объекта в :класс.
<button
class="ui button big"
:class="[isActive ? 'green' : 'red']"
@click="toggle"
>{{isActive ? 'ON' : 'OFF'}}</button>
В этом массиве мы можем использовать тернарный оператор, чтобы поменять местами два класса на основе значения свойства isActive.
Переключить один класс между двумя кнопками
Допустим, у вас есть страница оплаты с двумя вариантами; либо оплатить кредитной картой или Paypal.
У меня есть две кнопки с некоторыми CSS-классами семантического пользовательского интерфейса, и я привязал событие щелчка к обеим с помощью функции обратного вызова, называемой toggle().
<div class="ui buttons big">
<button
class="ui button toggle"
@click="toggle"
>Credit Card</button>
<button
class="ui button toggle"
@click="toggle"
>Paypal</button>
</div>
Теперь объявите свойство с именем showCreditCard внутри модели data().
Затем изменяйте состояние свойства showCreditCard при каждом нажатии любой кнопки.
export default {
data() {
return {
showCreditCard: true,
};
},
methods: {
toggle() {
this.showCreditCard = !this.showCreditCard;
},
},
};
Если для свойства showCreditCard задано значение true, класс active будет добавлен к кнопке кредитной карты, в противном случае — к кнопке Paypal.
<div class="ui buttons big">
<button
class="ui button toggle"
@click="toggle"
:class="[showCreditCard ? 'active' : '']"
>Credit Card</button>
<button
class="ui button toggle"
@click="toggle"
:class="[!showCreditCard ? 'active' : '']"
>Paypal</button>
</div>
Вот оно!
Дайте мне знать, комментируя ниже, если вы хотите добавить что-то, чего не хватает в этой статье.
Удачного кодирования!