Bootstrap'te geçiş düğmesi nasıl oluşturulur


93

Başlangıçta HTML, CSS ve JavaScript'te bir web uygulaması oluşturdum, ardından Bootstrap'ta da yeniden oluşturmam istendi. Her şeyi iyi yaptım, ancak web uygulamasında, orijinal olarak sahip olduğum geçiş düğmeleri yerine radyo (orijinal olarak onay kutusu) düğmelerine dönüşen geçiş düğmeleri vardı.

Düğmelerin kodu:

<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>

ve HTML sayfasının bağlı olduğu JavaScript ve CSS dosyaları şunlardır:

<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">

Geçiş düğmesini geri alabilmem için kodu değiştirmenin bir yolu var mı?



Bağlantı için minnettarım ama aradığım şey onda değil. Sahip olduğum geçiş düğmesi, bir iphone'da görebileceğiniz türdendi, "açık" / "kapalı" türü gibi. bu mantıklı mı?
Megan Sime

Tamam bu yüzden jqtouch.js ilişkilidir değil kendini önyükleyebilmek için bence
ItsMe

1
tamam. Yine de daha kolaysa github'da.
Megan Sime

1
LOL adamım sonsuz bir dosya listesi görüyorum :) daha spesifik olamaz mısın? : D
itsme

Yanıtlar:


81

2013'ten ilk cevap

Mükemmel (resmi olmayan) bir Bootstrap Anahtarı mevcuttur .

Klasik 2013 Anahtarı

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

Anahtar olarak radyo türlerini veya onay kutularını kullanır . typeV.1.8'den beri bir öznitelik eklendi.

Kaynak kodu Github'da mevcuttur .

2018 Notu

Pek çok kişinin işaret ettiği gibi her zaman kullanılabilirlik sorunlarından muzdarip göründüklerinden, bu tür eski Anahtar düğmelerini şimdi kullanmanızı tavsiye etmem .

Bakmak zorunda düşünün bunun gibi çağdaş Anahtarları gelen Bileşen çerçeveyi Tepki (ilgili olmayan Bootstrap ama Önyükleme ızgara ve UI olsa entegre edilebilir).

Angular, View veya jQuery için başka uygulamalar mevcuttur.

Modern 2018 Anahtarı

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'))

Yerel Önyükleme Anahtarları

Bkz ohkts11 cevabını hakkında aşağıda yerli Bootstrap anahtarları .


19
Bu anahtarlardan kaçınırdım
ckarbass

3
Bu site artık mevcut değil
w3bMak3r

Haklısın @ w3bMak3r, alan adı değiştirildi. Güncellenmiş.
smonff

Güzel bir eklenti. kullanımı kolay. ancak safari 5.1.7 ile ilgili sorun. Bir kez tıkladığımda bir başkası hareket ediyor. Bunu kimse çözebilir mi?
Sarower Jahan

2
Bootstrap Toggle başka bir önyükleme tabanlı alternatif
Charles P.

58

HTML'nizi değiştirmenin bir sakıncası yoksa, e- data-togglepostadaki özniteliği kullanabilirsiniz <button>. Düğme örneklerinin Tek geçiş bölümüne bakın :

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

1
Onay kutusu / radyo seçeneğindeki gibi tek geçişte dahili bir onay kutusuna sahip olmanın bir yolu var mı?
Shimmy Weitzhandler

3
aria-pressed="true"durumu kontrol etmek için kullanılabilir
brauliobo

31

Bootstrap 3, onay kutularına veya radyo düğmelerine göre geçiş düğmeleri oluşturma seçeneklerine sahiptir: http://getbootstrap.com/javascript/#buttons

Onay kutuları

<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>

Radyo düğmeleri

<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>

Bunların çalışması için, .btns'yi Bootstrap'ın Javascript'i ile başlatmanız gerekir :

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

Onay kutusu / radyo seçeneğindeki gibi tek geçişte dahili bir onay kutusuna sahip olmanın bir yolu var mı?
Shimmy Weitzhandler

@Shimmy: Tek bir onay kutusunu bir düğme grubuna koyarsanız, aynı davranışı elde edersiniz. Onay kutusu destekli tek geçiş elde etmenin daha az ayrıntılı bir yolunu bilmiyorum.
StriplingWarrior

7

Javascript ile manuel olarak 'aktif' sınıfı etkinleştirmeye çalışıyorum. Eksiksiz bir kütüphane kadar kullanışlı değil, ancak kolay durumlar için yeterli gibi görünüyor:

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

Dikkatlice düşünürseniz, 'active' sınıfı, düğmeye basıldığında önyükleme tarafından kullanılır, bundan önce veya sonra (bizim durumumuz), dolayısıyla aynı sınıfın yeniden kullanımında herhangi bir çatışma olmaz.

Bu örneği deneyin ve başarısız olup olmadığını bana söyleyin: http://jsbin.com/oYoSALI/1/edit?html,js,output


1
Sanırım kullanıcı bunu sormadı, ancak cevabınız sadece sorumu yanıtladı!
tetri

Sanırım bu kullanıcının bir sonraki sorusu olurdu.
eaglei22

5

Küçük bir kod tabanı tutmak istiyorsanız ve uygulamanın sadece küçük bir kısmı için geçiş düğmesine ihtiyacınız olacak. Bunun yerine javascript kodunuzu (angularjs, javascript, jquery) ve sadece düz CSS kullanmanızı öneririm.

İyi geçiş düğmesi oluşturucu: https://proto.io/freebies/onoff/


3

İşte bu Bootstrap Toggle Button için çok faydalı . Kod parçacığında örnek !! ve aşağıda 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>
Size yukarıda birkaç örnek gösterdim. Umut ediyorum bu yardım eder. Js Fiddle burada Kaynak kodu GitHub'da mevcuttur.

Bootstrap 4 için 2020 Güncellemesi

Ben tavsiye bootstrap4-durumlu 2020 yılında.

<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>


Kısa ve esaslı, hızlı ve kolay çözüm, günümü siz yaptınız!
Mayer Spitzer

2

CSS Geçiş Anahtarı kitaplığını kullanabilirsiniz. Sadece CSS'yi ekleyin ve JS'yi kendiniz programlayın: http://ghinda.net/css-toggle-switch/bootstrap.html


1
Bu, soruyu yanıtlasa da, yalnızca bir bağlantı değil, burada gerçek bilgileri sağlamak daha iyidir. Yalnızca bağlantı yanıtları iyi yanıtlar olarak kabul edilmez ve büyük olasılıkla silinecektir .
elixenide

Ancak bu bir açıklamaya bağlantı değildir. Bu, cevabımda adından bahsettiğim gerçek bir kitaplığa bağlantı. Tüm kütüphane kaynak kodunu buraya göndermemi gerçekten istiyor musun? Cevabım sadece kütüphanenin adını belirtmeden "bu kütüphaneyi kullan: [bağlantı]" desem yanlış olur, ancak isminden bahsettiğim için cevabın uygun olduğunu düşünüyorum çünkü bağlantı kötüleşirse İsmi bilindiği için kütüphaneyi başka bir yerden indirmeyi deneyebilir.
OMA

Tüm kütüphanenin kaynak kodunu göndermeniz gerekmez, ancak en azından onu nasıl kullanacağınıza dair biraz fikir vermeniz gerekir. "Yalnızca CSS'yi ekleyin ve JS'yi kendiniz programlayın", devam edecek pek bir şey değildir ve OP'ye veya diğer kullanıcılara yardımcı olma olasılığı düşüktür.
elixenide

2
Peki, kullanımı gerçekten bu kadar kolay! CSS kod örneklerinden birini ekleyin ve ardından JS'yi yapmak istediğiniz şeyle programlayın. Orijinal gönderen, geçiş düğmesini kullanırken belirli bir eylemin gerçekleştirilmesini istemediği için gerçek JS programlaması hakkında yorum yapamam, peki bu konuda başka ne söyleyebilirim? Ayrıca, kabul edilen cevap neden tamam olarak kabul ediliyor? Aynı zamanda bir "yalnızca bağlantı" yanıtıdır! (Sadece "Yardımcı olup olmadığından emin değilim, ancak mükemmel (resmi olmayan) bir Bootstrap Switch var. Yine de radyo türlerini kullanıyor" yazıyor). Bu cevap neden uygun? Orada sadece bağlantı içeren doğası hakkında yorum yapmadınız.
OMA



-1

Birisinin hala güzel bir anahtar / geçiş düğmesi araması durumunda, Rick'in önerisini izledim ve etrafında basit bir açısal yönerge oluşturdum, açısal anahtar . Windows tarzı bir anahtarı tercih etmenin yanı sıra, toplam indirme de yukarıda birlikte bahsedilen açısal önyükleme anahtarı ve önyükleme anahtarı ile karşılaştırıldığında çok daha küçüktür (2kb ve 23kb küçültülmüş css + js).

Aşağıdaki gibi kullanırsınız. Önce gerekli js ve css dosyasını ekleyin:

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

Ve açısal uygulamanızda etkinleştirin:

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

Artık aşağıdaki gibi kullanmaya hazırsınız:

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

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.