Як створити кнопку перемикання в Bootstrap


92

Спочатку я створив веб-програму в HTML, CSS та JavaScript, а потім попросив створити її знову в Bootstrap. Я все це зробив чудово, але в веб-програмі у мене були кнопки перемикання, які замінили кнопки радіо (спочатку прапорець) замість кнопок перемикання, які я мав спочатку.

Код кнопок:

<label>
  Notifications
  <span class='toggle'>
    <input type='radio'
      class='notifications'
      name='notifications'
      id='notifications' />
  </span>
</li>
<label>
  Preview
  <span class='toggle'>
    <input type='radio'
      class='preview'
      name='preview'
      id='preview' />
  </span>
</li>

а файли JavaScript і CSS, на які пов’язана сторінка HTML:

<script src = 'jqtouch.js'></script>
<script src="jquery.js"></script>
<script src="js/bootstrap.js"></script>
<link href="css/bootstrap.css" rel="stylesheet">
<link href="css/bootstrap-responsive.css" rel="stylesheet">

Чи є спосіб змінити код, щоб я міг повернути кнопку перемикання назад?


1
ось багато прикладів twitter.github.com/bootstrap/javascript.html#buttons
— itsme

Я ціную посилання, але в ньому немає того, що я шукаю. кнопка перемикання, яку я мав, була такою доброю, яку ви бачили б на iphone, подібно до типу «увімкнено» / «вимкнено». Чи має це сенс?
— Меган Сіме

гаразд, тому це пов’язано з jqtouch.js, а не з самим завантажувальним
— ремінцем,

1
гаразд. це на github, якщо це простіше.
— Меган Сіме

1
LOL людина, я бачу нескінченний список файлів :) не можете бути конкретнішими? : D
— itsme

Відповіді:


80

Початкова відповідь з 2013 року

Доступний чудовий (неофіційний) перемикач Bootstrap .

Класичний перемикач 2013 року

<input type="checkbox" name="my-checkbox" checked>
$("[name='my-checkbox']").bootstrapSwitch();

Він використовує типи радіо або прапорці як перемикачі. typeДоданий атрибут , так як v.1.8.

Вихідний код доступний на Github .

Примітка від 2018 року

Я б не рекомендував використовувати такі старі кнопки перемикача зараз, оскільки вони, здається, завжди страждають від проблем юзабіліті , на що вказують багато людей.

Будь ласка, подумайте про те, щоб поглянути на такі сучасні комутатори з фреймворку React Component (не пов'язані з Bootstrap, але їх можна інтегрувати в сітку Bootstrap та UI).

Інші реалізації існують для Angular, View або jQuery.

Сучасний вимикач 2018 року

import '../assets/index.less'
import React from 'react'
import ReactDOM from 'react-dom'
import Switch from 'rc-switch'

class Switcher extends React.Component {
  state = {
    disabled: false,
  }

  toggle = () => {
    this.setState({
      disabled: !this.state.disabled,
    })
  }

  render() {
    return (
      <div style={{ margin: 20 }}>
        <Switch
          disabled={this.state.disabled}
          checkedChildren={'开'}
          unCheckedChildren={'关'}
        />
        </div>
      </div>
    )
  }
}

ReactDOM.render(<Switcher />, document.getElementById('__react-content'))

Вбудовані перемикачі Bootstrap

Дивіться відповідь ohkts11 нижче про власні комутатори Bootstrap .


19
Я б уникав цих перемикань: ux.stackexchange.com/questions/1318/…
— ckarbass

3
Цей сайт більше не існує
— w3bMak3r

Ви маєте рацію @ w3bMak3r, доменне ім'я змінено. Оновлено.
— smonff

Це хороший плагін. простий у використанні. але проблема з сафарі 5.1.7. Коли я клацну один раз, рухаються інші. хто-небудь може це вирішити?
— Sarower Jahan

2
Bootstrap Toggle - ще одна альтернатива на основі bootstrap
— Чарльз П.

58

Якщо ви не проти змінити свій HTML, ви можете використовувати data-toggleатрибут на <button>s. Дивіться Single тумблер розділ прикладів кнопки :

<button type="button" class="btn btn-primary" data-toggle="button">
    Single toggle
</button>

1
Чи є спосіб встановити внутрішній прапорець в одному перемикачі, як у варіанті прапорця / радіо ?
— Shimmy Weitzhandler

3
aria-pressed="true"може використовуватися для перевірки стану
— брауліобо

31

Bootstrap 3 має опції для створення кнопок перемикання на основі прапорців або перемикачів: http://getbootstrap.com/javascript/#buttons

Прапорці

<div class="btn-group" data-toggle="buttons">
  <label class="btn btn-primary active">
    <input type="checkbox" checked> Option 1 (pre-checked)
  </label>
  <label class="btn btn-primary">
    <input type="checkbox"> Option 2
  </label>
  <label class="btn btn-primary">
    <input type="checkbox"> Option 3
  </label>
</div>

Перемикачі

<div class="btn-group" data-toggle="buttons">
  <label class="btn btn-primary active">
    <input type="radio" name="options" id="option1" checked> Option 1 (preselected)
  </label>
  <label class="btn btn-primary">
    <input type="radio" name="options" id="option2"> Option 2
  </label>
  <label class="btn btn-primary">
    <input type="radio" name="options" id="option3"> Option 3
  </label>
</div>

Щоб вони працювали, потрібно ініціалізувати .btns за допомогою Javascript Bootstrap:

$('.btn').button();

Чи є спосіб встановити внутрішній прапорець в одному перемикачі, як у варіанті прапорця / радіо ?
— Shimmy Weitzhandler

@Shimmy: Якщо ви просто поставите один прапорець у групу кнопок, ви отримаєте однакову поведінку. Мені не відомий жоден менш детальний спосіб отримати одинарне перемикання з підтримкою прапорця.
— StriplingWarrior

7

Я намагався активувати "активний" клас вручну за допомогою JavaScript. Це не настільки придатне для використання, як повна бібліотека, але для простих випадків цього вистачає:

var button = $('#myToggleButton');
button.on('click', function () {
  $(this).toggleClass('active');
});

Якщо ви ретельно продумаєте, "активний" клас використовується bootstrap під час натискання кнопки, а не до або після цього (у нашому випадку), тому немає конфлікту при повторному використанні того самого класу.

Спробуйте цей приклад і скажіть мені, якщо він не вдається: http://jsbin.com/oYoSALI/1/edit?html,js,output


1
Я думаю, що користувач не запитував про це, але ваша відповідь просто відповіла на моє питання!
— тетрі

Думаю, це все одно було б наступним запитанням користувача.
— eaglei22

5

Якщо ви хочете зберегти невелику базу коду, і вам знадобиться лише кнопка перемикання для невеликої частини програми. Я б запропонував замість цього підтримувати свій код javascript (angularjs, javascript, jquery) і просто використовувати звичайний CSS.

Хороший генератор кнопок перемикання: https://proto.io/freebies/onoff/


3

Ось ця дуже корисна кнопка перемикання Bootstrap . Приклад у фрагменті коду !! та jsfiddle нижче.

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
    <script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
    <input id="toggle-trigger" type="checkbox" checked data-toggle="toggle">
    <button class="btn btn-success" onclick="toggleOn()">On by API</button>
<button class="btn btn-danger" onclick="toggleOff()">Off by API</button>
<button class="btn btn-primary" onclick="getValue()">Get Value</button>
<script>
  //If you want to change it dynamically
  function toggleOn() {
    $('#toggle-trigger').bootstrapToggle('on')
  }
  function toggleOff() {
    $('#toggle-trigger').bootstrapToggle('off')  
  }
  //if you want get value
  function getValue()
  {
   var value=$('#toggle-trigger').bootstrapToggle().prop('checked');
   console.log(value);
  }
</script>
Я показав вам кілька прикладів вище. Сподіваюся, це допоможе. Js Fiddle тут Вихідний код доступний на GitHub.

Оновлення 2020 для Bootstrap 4

Я рекомендував bootstrap4-toggle у 2020 році.

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

<link href="https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/css/bootstrap4-toggle.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/js/bootstrap4-toggle.min.js"></script>

<input id="toggle-trigger" type="checkbox" checked data-toggle="toggle" data-onstyle="success">
<button class="btn btn-success" onclick="toggleOn()">On by API</button>
<button class="btn btn-danger" onclick="toggleOff()">Off by API</button>
<button class="btn btn-primary" onclick="getValue()">Get Value</button>

<script>
  //If you want to change it dynamically
  function toggleOn() {
    $('#toggle-trigger').bootstrapToggle('on')
  }
  function toggleOff() {
    $('#toggle-trigger').bootstrapToggle('off')  
  }
  //if you want get value
  function getValue()
  {
   var value=$('#toggle-trigger').bootstrapToggle().prop('checked');
   console.log(value);
  }
</script>


Коротке, і суттєве, швидке та просте рішення, ви встигли мені день!
— Mayer Spitzer

2

Ви можете використовувати бібліотеку CSS Toggle Switch. Просто включіть CSS і запрограмуйте JS самостійно: http://ghinda.net/css-toggle-switch/bootstrap.html


1
Хоча це може відповісти на запитання, краще надати тут фактичну інформацію, а не лише посилання. Відповіді лише на посилання не вважаються хорошими відповідями, і їх, можливо, буде видалено .
— elixenide

Але це не посилання на пояснення. Це посилання на фактичну бібліотеку, назву якої я згадую у своїй відповіді. Ви дійсно хочете, щоб я розмістив тут весь вихідний код бібліотеки? Моя відповідь була б неправильною, якби я просто сказав "використовувати цю бібліотеку: [посилання]", не згадуючи назви бібліотеки, але оскільки я згадую це ім'я, я вважаю, що відповідь відповідна, оскільки, якщо посилання піде погано, він / вона може спробувати завантажити бібліотеку звідкись ще, оскільки назва відома.
— OMA

Вам не потрібно розміщувати весь вихідний код бібліотеки, але принаймні вам потрібно запропонувати деяке розуміння того, як ним користуватися. "Просто включіть CSS і самостійно запрограмуйте JS" - це не надто багато, що, мабуть, не допоможе OP або іншим користувачам.
— elixenide

2
Ну, це насправді так просто у використанні! Просто включіть один із зразків коду CSS, а потім запрограмуйте JS тим, що хочете зробити. Я не можу коментувати фактичне програмування JS, оскільки оригінальний плакат не просив виконати певну дію при використанні кнопки перемикання, то що я ще можу сказати про це? Крім того, чому прийнята відповідь вважається нормальною? Це також відповідь "лише за посиланням"! (там просто сказано: "Не впевнений, чи допомагає, але відмінний (неофіційний) перемикач Bootstrap доступний. Він використовує типи радіо"). Чому з цією відповіддю все гаразд? Ви там не коментували його характер лише для посилань.
— OMA



-1

Якщо хтось все ще шукає гарну кнопку перемикання / перемикання, я наслідував пропозицію Ріка і створив навколо неї просту кутову директиву, angular-switch . Окрім переваги стилю в стилі Windows, загальне завантаження також набагато менше (2 кб проти 23 кб мініфікованого css + js) у порівнянні з angular-bootstrap-switch і bootstrap-switch, згаданими вище.

Ви б використали його наступним чином. Спочатку включіть необхідний файл js та css:

<script src="./bower_components/angular-switch/dist/switch.js"></script>
<link rel="stylesheet" href="./bower_components/angular-switch/dist/switch.css"></link>

І увімкніть його у своєму кутовому додатку:

angular.module('yourModule', ['csComp'
    // other dependencies
]);

Тепер ви готові використовувати його наступним чином:

<switch state="vm.isSelected" 
    textlabel="Switch" 
    changed="vm.changed()"
    isdisabled="{{isDisabled}}">
</switch>

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.