Как создать переключатель включения/выключения с помощью Javascript/CSS?
Я хочу иметь скользящий переключатель. Слева будет Off, а справа будет On. Когда пользователь переключает переключатель, я хочу, чтобы часть слайдера сдвигалась с другой стороны и указывала, что он выключен. Тогда я мог бы выполнить обратный вызов, который принимает в качестве входного состояния тумблер, чтобы я мог действовать соответствующим образом.
Любая идея, как это сделать?
Ответы
Ответ 1
Вы имеете в виду что-то вроде флажков IPhone?
Попробуйте Флажки iOS Томаса Рейнольдса script:
Как только файлы доступны вашему сайту, активация script очень проста:
...
$(document).ready(function() {
$(':checkbox').iphoneStyle();
});
Результаты:
![]()
Ответ 2
проверьте этот генератор: Вкл./Выкл. FlipSwitch
вы можете получить различные результаты в стиле и только css - нет javascript!
Ответ 3
Использование простого javascript
<html>
<head>
<!-- define on/off styles -->
<style type="text/css">
.on { background:blue; }
.off { background:red; }
</style>
<!-- define the toggle function -->
<script language="javascript">
function toggleState(item){
if(item.className == "on") {
item.className="off";
} else {
item.className="on";
}
}
</script>
</head>
<body>
<!-- call 'toggleState' whenever clicked -->
<input type="button" id="btn" value="button"
class="off" onclick="toggleState(this)" />
</body>
</html>
Использование jQuery
Если вы используете jQuery, вы можете сделать это, используя функцию toggle или используя toggleClass функция внутри обработчика событий щелчка, например:
$(document).ready(function(){
$('a#myButton').click(function(){
$(this).toggleClass("btnClicked");
});
});
Используя эффекты jQuery UI, вы можете анимировать переходы: http://jqueryui.com/demos/toggleClass/
Ответ 4
Я искал то же самое. Если вы используете Bootstrap, доступен отличный (неофициальный) Bootstrap Switch.
Ответ 5
Вы можете добиться этого с помощью HTML и CSS и конвертировать флажок в HTML-переключатель.
HTML
<div class="switch">
<input id="cmn-toggle-1" class="cmn-toggle cmn-toggle-round" type="checkbox">
<label for="cmn-toggle-1"></label>
</div>
CSS
input.cmn-toggle-round + label {
padding: 2px;
width: 100px;
height: 30px;
background-color: #dddddd;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
-ms-border-radius: 30px;
-o-border-radius: 30px;
border-radius: 30px;
}
input.cmn-toggle-round + label:before, input.cmn-toggle-round + label:after {
display: block;
position: absolute;
top: 1px;
left: 1px;
bottom: 1px;
content: "";
}
input.cmn-toggle-round + label:before {
right: 1px;
background-color: #f1f1f1;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
-ms-border-radius: 30px;
-o-border-radius: 30px;
border-radius: 30px;
-webkit-transition: background 0.4s;
-moz-transition: background 0.4s;
-o-transition: background 0.4s;
transition: background 0.4s;
}
input.cmn-toggle-round + label:after {
width: 40px;
background-color: #fff;
-webkit-border-radius: 100%;
-moz-border-radius: 100%;
-ms-border-radius: 100%;
-o-border-radius: 100%;
border-radius: 100%;
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
-webkit-transition: margin 0.4s;
-moz-transition: margin 0.4s;
-o-transition: margin 0.4s;
transition: margin 0.4s;
}
input.cmn-toggle-round:checked + label:before {
background-color: #8ce196;
}
input.cmn-toggle-round:checked + label:after {
margin-left: 60px;
}
.cmn-toggle {
position: absolute;
margin-left: -9999px;
visibility: hidden;
}
.cmn-toggle + label {
display: block;
position: relative;
cursor: pointer;
outline: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
DEMO
Ответ 6
Контур: создайте два элемента: слайдер/переключатель и лоток в качестве родителя ползунка. Чтобы переключить состояние, переключите элемент слайдера между классами "on" и "off". В стиле для одного класса установите "left" в 0 и оставьте "right" по умолчанию; для другого класса, сделайте обратное:
<style type="text/css">
.toggleSwitch {
width: ...;
height: ...;
/* add other styling as appropriate to position element */
position: relative;
}
.slider {
background-image: url(...);
position: absolute;
width: ...;
height: ...;
}
.slider.on {
right: 0;
}
.slider.off {
left: 0;
}
</style>
<script type="text/javascript">
function replaceClass(elt, oldClass, newClass) {
var oldRE = RegExp('\\b'+oldClass+'\\b');
elt.className = elt.className.replace(oldRE, newClass);
}
function toggle(elt, on, off) {
var onRE = RegExp('\\b'+on+'\\b');
if (onRE.test(elt.className)) {
elt.className = elt.className.replace(onRE, off);
} else {
replaceClass(elt, off, on);
}
}
</script>
...
<div class="toggleSwitch" onclick="toggle(this.firstChild, 'on', 'off');"><div class="slider off" /></div>
В качестве альтернативы просто установите фоновое изображение для состояний "on" и "off", что намного проще, чем прореживание с позиционированием.
Ответ 7
proto.io имеет действительно хороший генератор переключателей/выходов, который, как представляется, очень настраиваемый. Я мог бы использовать его для моего проекта.
https://proto.io/freebies/onoff/
Ответ 8
Вы можете взглянуть на пользовательский интерфейс Shield включить виджет. Он так же прост в использовании:
<input id="switch3" type="checkbox" value="" />
<script type="text/javascript">
jQuery(function ($) {
$("#switch3").shieldSwitch({
onText: "Yes, save it",
ffText: "No, delete it",
cls: "large"
});
</script>