Кнопка переключения Vue.js
Как создать свой собственный переключатель с помощью vue.js
Этот компонент Toggle Button представляет собой настраиваемый элемент управления компонентом типа ввода HTML5, который позволяет вам выполнять действие переключения (включения / выключения) между отмеченным и непроверенным состояниями.
Начнем с раздела HTML.
<template> <label class=”switch”> <input :checked=”checked” @change=”changeInput” @input=”$emit(‘input’, $event.target.checked)” value=”1" type=”checkbox” > <span class=”slider round“ /> </label> </template>
Мы добавили собственный класс для настройки дизайна с помощью некоторого CSS, поэтому я выберу разные цвета и интервалы, как вы видите ниже:
<style scoped> .switch { position: relative; display: inline-block; width: 35px; height: 22px; } .switch input { opacity: 0; width: 0; height: 0; } .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #fff; -webkit-transition: .7s; transition: .7s; border:1px solid #ffffff; } .slider:before { position: absolute; content: “”; height: 22px; width: 22px; left: -3px; bottom: -2px; background-color: #2567A2; -webkit-transition: .4s; transition: .4s; border: solid 1.5px #fff; } input:checked + .slider { background-color: transparent; } input:focus + .slider { box-shadow: 0 0 1px #2567A2; } input:checked + .slider:before { -webkit-transform: translateX(31px); -ms-transform: translateX(31px); transform: translateX(15px); background: #2567A2; -webkit-transition: .7s; transition: .7s; border: solid 2px #fff; } .slider.round { border-radius: 24px; border-color: #ffffff; } .slider.round:before { border-radius: 50%; border-color: #ffffff; } </style>
Теперь мы собираемся создать основную и последнюю часть (функции). Мы добавим Prop (значение) и укажем тип этого свойства как Boolean. Затем мы закодируем метод ввода изменений и будем следить за этим изменением каждый раз.
<script> export default { props: { value: { type: Boolean, default: false } }, data() { return { checked: this.value } }, watch: { checked(val) { this.$emit(‘input’, this.checked) } }, methods: { changeInput() { this.checked = !this.checked this.$emit(‘input’, !this.value) } } } </script>
Надеюсь, это помогло!
Вы можете протестировать его в codeandbox .