Як створити кнопку перемикання в 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.