Electron使用滑动开关bootstrap-switch的方式

Electron使用滑动开关bootstrap-switch的方式

当需要在HTML应用包括Electron使用滑动开关时,可以采用bootstrap的ootstrap-switch插件,这里简单记录使用方式。

在这里插入图片描述
在这里插入图片描述

官网及下载

可以通过github库下载插件
Github链接

这里给出bootstrap-switch.min.css文件内容

/**
  * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.
  *
  * @version v3.3.4
  * @homepage https://bttstrp.github.io/bootstrap-switch
  * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)
  * @license Apache-2.0
  */

.bootstrap-switch {
    display: inline-block;
    direction: ltr;
    cursor: pointer;
    border-radius: 4px;
    border: 1px solid;
    border-color: #ccc;
    position: relative;
    text-align: left;
    overflow: hidden;
    line-height: 8px;
    z-index: 0;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    vertical-align: middle;
    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
    -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.bootstrap-switch .bootstrap-switch-container {
    display: inline-block;
    top: 0;
    border-radius: 4px;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
}
.bootstrap-switch .bootstrap-switch-handle-on,
.bootstrap-switch .bootstrap-switch-handle-off,
.bootstrap-switch .bootstrap-switch-label {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    cursor: pointer;
    display: table-cell;
    vertical-align: middle;
    padding: 6px 12px;
    font-size: 14px;
    line-height: 20px;
}
.bootstrap-switch .bootstrap-switch-handle-on,
.bootstrap-switch .bootstrap-switch-handle-off {
    text-align: center;
    z-index: 1;
}
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {
    color: #fff;
    background: #337ab7;
}
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {
    color: #fff;
    background: #5bc0de;
}
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {
    color: #fff;
    background: #5cb85c;
}
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {
    background: #f0ad4e;
    color: #fff;
}
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {
    color: #fff;
    background: #d9534f;
}
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {
    color: #000;
    background: #eeeeee;
}
.bootstrap-switch .bootstrap-switch-label {
    text-align: center;
    margin-top: -1px;
    margin-bottom: -1px;
    z-index: 100;
    color: #333;
    background: #fff;
}
.bootstrap-switch span::before {
    content: "\200b";
}
.bootstrap-switch .bootstrap-switch-handle-on {
    border-bottom-left-radius: 3px;
    border-top-left-radius: 3px;
}
.bootstrap-switch .bootstrap-switch-handle-off {
    border-bottom-right-radius: 3px;
    border-top-right-radius: 3px;
}
.bootstrap-switch input[type='radio'],
.bootstrap-switch input[type='checkbox'] {
    position: absolute !important;
    top: 0;
    left: 0;
    margin: 0;
    z-index: -1;
    opacity: 0;
    filter: alpha(opacity=0);
    visibility: hidden;
}
.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,
.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,
.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {
    padding: 1px 5px;
    font-size: 12px;
    line-height: 1.5;
}
.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,
.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,
.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {
    padding: 5px 10px;
    font-size: 12px;
    line-height: 1.5;
}
.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,
.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,
.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {
    padding: 6px 16px;
    font-size: 18px;
    line-height: 1.3333333;
}
.bootstrap-switch.bootstrap-switch-disabled,
.bootstrap-switch.bootstrap-switch-readonly,
.bootstrap-switch.bootstrap-switch-indeterminate {
    cursor: default !important;
}
.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,
.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,
.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,
.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,
.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,
.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,
.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,
.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,
.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {
    opacity: 0.5;
    filter: alpha(opacity=50);
    cursor: default !important;
}
.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {
    -webkit-transition: margin-left 0.5s;
    -o-transition: margin-left 0.5s;
    transition: margin-left 0.5s;
}
.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {
    border-bottom-left-radius: 0;
    border-top-left-radius: 0;
    border-bottom-right-radius: 3px;
    border-top-right-radius: 3px;
}
.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {
    border-bottom-right-radius: 0;
    border-top-right-radius: 0;
    border-bottom-left-radius: 3px;
    border-top-left-radius: 3px;
}
.bootstrap-switch.bootstrap-switch-focused {
    border-color: #66afe9;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,
.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label {
    border-bottom-right-radius: 3px;
    border-top-right-radius: 3px;
}
.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,
.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label {
    border-bottom-left-radius: 3px;
    border-top-left-radius: 3px;
}

以及bootstrap-switch.min.js文件内容

/**
 * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.
 *
 * @version v3.3.4
 * @homepage https://bttstrp.github.io/bootstrap-switch
 * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)
 * @license Apache-2.0
 */

(function (global, factory) {
    if (typeof define === "function" && define.amd) {
        define(['jquery'], factory);
    } else if (typeof exports !== "undefined") {
        factory(require('jquery'));
    } else {
        var mod = {
            exports: {}
        };
        factory(global.jquery);
        global.bootstrapSwitch = mod.exports;
    }
})(this, function (_jquery) {
    'use strict';

    var _jquery2 = _interopRequireDefault(_jquery);

    function _interopRequireDefault(obj) {
        return obj && obj.__esModule ? obj : {
            default: obj
        };
    }

    var _extends = Object.assign || function (target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];

            for (var key in source) {
                if (Object.prototype.hasOwnProperty.call(source, key)) {
                    target[key] = source[key];
                }
            }
        }

        return target;
    };

    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) {
            throw new TypeError("Cannot call a class as a function");
        }
    }

    var _createClass = function () {
        function defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) descriptor.writable = true;
                Object.defineProperty(target, descriptor.key, descriptor);
            }
        }

        return function (Constructor, protoProps, staticProps) {
            if (protoProps) defineProperties(Constructor.prototype, protoProps);
            if (staticProps) defineProperties(Constructor, staticProps);
            return Constructor;
        };
    }();

    var $ = _jquery2.default || window.jQuery || window.$;

    var BootstrapSwitch = function () {
        function BootstrapSwitch(element) {
            var _this = this;

            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

            _classCallCheck(this, BootstrapSwitch);

            this.$element = $(element);
            this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, this._getElementOptions(), options);
            this.prevOptions = {};
            this.$wrapper = $('<div>', {
                class: function _class() {
                    var classes = [];
                    classes.push(_this.options.state ? 'on' : 'off');
                    if (_this.options.size) {
                        classes.push(_this.options.size);
                    }
                    if (_this.options.disabled) {
                        classes.push('disabled');
                    }
                    if (_this.options.readonly) {
                        classes.push('readonly');
                    }
                    if (_this.options.indeterminate) {
                        classes.push('indeterminate');
                    }
                    if (_this.options.inverse) {
                        classes.push('inverse');
                    }
                    if (_this.$element.attr('id')) {
                        classes.push('id-' + _this.$element.attr('id'));
                    }
                    return classes.map(_this._getClass.bind(_this)).concat([_this.options.baseClass], _this._getClasses(_this.options.wrapperClass)).join(' ');
                }
            });
            this.$container = $('<div>', { class: this._getClass('container') });
            this.$on = $('<span>', {
                html: this.options.onText,
                class: this._getClass('handle-on') + ' ' + this._getClass(this.options.onColor)
            });
            this.$off = $('<span>', {
                html: this.options.offText,
                class: this._getClass('handle-off') + ' ' + this._getClass(this.options.offColor)
            });
            this.$label = $('<span>', {
                html: this.options.labelText,
                class: this._getClass('label')
            });

            this.$element.on('init.bootstrapSwitch', this.options.onInit.bind(this, element));
            this.$element.on('switchChange.bootstrapSwitch', function () {
                for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
                    args[_key] = arguments[_key];
                }

                if (_this.options.onSwitchChange.apply(element, args) === false) {
                    if (_this.$element.is(':radio')) {
                        $('[name="' + _this.$element.attr('name') + '"]').trigger('previousState.bootstrapSwitch', true);
                    } else {
                        _this.$element.trigger('previousState.bootstrapSwitch', true);
                    }
                }
            });

            this.$container = this.$element.wrap(this.$container).parent();
            this.$wrapper = this.$container.wrap(this.$wrapper).parent();
            this.$element.before(this.options.inverse ? this.$off : this.$on).before(this.$label).before(this.options.inverse ? this.$on : this.$off);

            if (this.options.indeterminate) {
                this.$element.prop('indeterminate', true);
            }

            this._init();
            this._elementHandlers();
            this._handleHandlers();
            this._labelHandlers();
            this._formHandler();
            this._externalLabelHandler();
            this.$element.trigger('init.bootstrapSwitch', this.options.state);
        }

        _createClass(BootstrapSwitch, [{
            key: 'setPrevOptions',
            value: function setPrevOptions() {
                this.prevOptions = _extends({}, this.options);
            }
        }, {
            key: 'state',
            value: function state(value, skip) {
                if (typeof value === 'undefined') {
                    return this.options.state;
                }
                if (this.options.disabled || this.options.readonly || this.options.state && !this.options.radioAllOff && this.$element.is(':radio')) {
                    return this.$element;
                }
                if (this.$element.is(':radio')) {
                    $('[name="' + this.$element.attr('name') + '"]').trigger('setPreviousOptions.bootstrapSwitch');
                } else {
                    this.$element.trigger('setPreviousOptions.bootstrapSwitch');
                }
                if (this.options.indeterminate) {
                    this.indeterminate(false);
                }
                this.$element.prop('checked', Boolean(value)).trigger('change.bootstrapSwitch', skip);
                return this.$element;
            }
        }, {
            key: 'toggleState',
            value: function toggleState(skip) {
                if (this.options.disabled || this.options.readonly) {
                    return this.$element;
                }
                if (this.options.indeterminate) {
                    this.indeterminate(false);
                    return this.state(true);
                } else {
                    return this.$element.prop('checked', !this.options.state).trigger('change.bootstrapSwitch', skip);
                }
            }
        }, {
            key: 'size',
            value: function size(value) {
                if (typeof value === 'undefined') {
                    return this.options.size;
                }
                if (this.options.size != null) {
                    this.$wrapper.removeClass(this._getClass(this.options.size));
                }
                if (value) {
                    this.$wrapper.addClass(this._getClass(value));
                }
                this._width();
                this._containerPosition();
                this.options.size = value;
                return this.$element;
            }
        }, {
            key: 'animate',
            value: function animate(value) {
                if (typeof value === 'undefined') {
                    return this.options.animate;
                }
                if (this.options.animate === Boolean(value)) {
                    return this.$element;
                }
                return this.toggleAnimate();
            }
        }, {
            key: 'toggleAnimate',
            value: function toggleAnimate() {
                this.options.animate = !this.options.animate;
                this.$wrapper.toggleClass(this._getClass('animate'));
                return this.$element;
            }
        }, {
            key: 'disabled',
            value: function disabled(value) {
                if (typeof value === 'undefined') {
                    return this.options.disabled;
                }
                if (this.options.disabled === Boolean(value)) {
                    return this.$element;
                }
                return this.toggleDisabled();
            }
        }, {
            key: 'toggleDisabled',
            value: function toggleDisabled() {
                this.options.disabled = !this.options.disabled;
                this.$element.prop('disabled', this.options.disabled);
                this.$wrapper.toggleClass(this._getClass('disabled'));
                return this.$element;
            }
        }, {
            key: 'readonly',
            value: function readonly(value) {
                if (typeof value === 'undefined') {
                    return this.options.readonly;
                }
                if (this.options.readonly === Boolean(value)) {
                    return this.$element;
                }
                return this.toggleReadonly();
            }
        }, {
            key: 'toggleReadonly',
            value: function toggleReadonly() {
                this.options.readonly = !this.options.readonly;
                this.$element.prop('readonly', this.options.readonly);
                this.$wrapper.toggleClass(this._getClass('readonly'));
                return this.$element;
            }
        }, {
            key: 'indeterminate',
            value: function indeterminate(value) {
                if (typeof value === 'undefined') {
                    return this.options.indeterminate;
                }
                if (this.options.indeterminate === Boolean(value)) {
                    return this.$element;
                }
                return this.toggleIndeterminate();
            }
        }, {
            key: 'toggleIndeterminate',
            value: function toggleIndeterminate() {
                this.options.indeterminate = !this.options.indeterminate;
                this.$element.prop('indeterminate', this.options.indeterminate);
                this.$wrapper.toggleClass(this._getClass('indeterminate'));
                this._containerPosition();
                return this.$element;
            }
        }, {
            key: 'inverse',
            value: function inverse(value) {
                if (typeof value === 'undefined') {
                    return this.options.inverse;
                }
                if (this.options.inverse === Boolean(value)) {
                    return this.$element;
                }
                return this.toggleInverse();
            }
        }, {
            key: 'toggleInverse',
            value: function toggleInverse() {
                this.$wrapper.toggleClass(this._getClass('inverse'));
                var $on = this.$on.clone(true);
                var $off = this.$off.clone(true);
                this.$on.replaceWith($off);
                this.$off.replaceWith($on);
                this.$on = $off;
                this.$off = $on;
                this.options.inverse = !this.options.inverse;
                return this.$element;
            }
        }, {
            key: 'onColor',
            value: function onColor(value) {
                if (typeof value === 'undefined') {
                    return this.options.onColor;
                }
                if (this.options.onColor) {
                    this.$on.removeClass(this._getClass(this.options.onColor));
                }
                this.$on.addClass(this._getClass(value));
                this.options.onColor = value;
                return this.$element;
            }
        }, {
            key: 'offColor',
            value: function offColor(value) {
                if (typeof value === 'undefined') {
                    return this.options.offColor;
                }
                if (this.options.offColor) {
                    this.$off.removeClass(this._getClass(this.options.offColor));
                }
                this.$off.addClass(this._getClass(value));
                this.options.offColor = value;
                return this.$element;
            }
        }, {
            key: 'onText',
            value: function onText(value) {
                if (typeof value === 'undefined') {
                    return this.options.onText;
                }
                this.$on.html(value);
                this._width();
                this._containerPosition();
                this.options.onText = value;
                return this.$element;
            }
        }, {
            key: 'offText',
            value: function offText(value) {
                if (typeof value === 'undefined') {
                    return this.options.offText;
                }
                this.$off.html(value);
                this._width();
                this._containerPosition();
                this.options.offText = value;
                return this.$element;
            }
        }, {
            key: 'labelText',
            value: function labelText(value) {
                if (typeof value === 'undefined') {
                    return this.options.labelText;
                }
                this.$label.html(value);
                this._width();
                this.options.labelText = value;
                return this.$element;
            }
        }, {
            key: 'handleWidth',
            value: function handleWidth(value) {
                if (typeof value === 'undefined') {
                    return this.options.handleWidth;
                }
                this.options.handleWidth = value;
                this._width();
                this._containerPosition();
                return this.$element;
            }
        }, {
            key: 'labelWidth',
            value: function labelWidth(value) {
                if (typeof value === 'undefined') {
                    return this.options.labelWidth;
                }
                this.options.labelWidth = value;
                this._width();
                this._containerPosition();
                return this.$element;
            }
        }, {
            key: 'baseClass',
            value: function baseClass(value) {
                return this.options.baseClass;
            }
        }, {
            key: 'wrapperClass',
            value: function wrapperClass(value) {
                if (typeof value === 'undefined') {
                    return this.options.wrapperClass;
                }
                if (!value) {
                    value = $.fn.bootstrapSwitch.defaults.wrapperClass;
                }
                this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(' '));
                this.$wrapper.addClass(this._getClasses(value).join(' '));
                this.options.wrapperClass = value;
                return this.$element;
            }
        }, {
            key: 'radioAllOff',
            value: function radioAllOff(value) {
                if (typeof value === 'undefined') {
                    return this.options.radioAllOff;
                }
                var val = Boolean(value);
                if (this.options.radioAllOff === val) {
                    return this.$element;
                }
                this.options.radioAllOff = val;
                return this.$element;
            }
        }, {
            key: 'onInit',
            value: function onInit(value) {
                if (typeof value === 'undefined') {
                    return this.options.onInit;
                }
                if (!value) {
                    value = $.fn.bootstrapSwitch.defaults.onInit;
                }
                this.options.onInit = value;
                return this.$element;
            }
        }, {
            key: 'onSwitchChange',
            value: function onSwitchChange(value) {
                if (typeof value === 'undefined') {
                    return this.options.onSwitchChange;
                }
                if (!value) {
                    value = $.fn.bootstrapSwitch.defaults.onSwitchChange;
                }
                this.options.onSwitchChange = value;
                return this.$element;
            }
        }, {
            key: 'destroy',
            value: function destroy() {
                var $form = this.$element.closest('form');
                if ($form.length) {
                    $form.off('reset.bootstrapSwitch').removeData('bootstrap-switch');
                }
                this.$container.children().not(this.$element).remove();
                this.$element.unwrap().unwrap().off('.bootstrapSwitch').removeData('bootstrap-switch');
                return this.$element;
            }
        }, {
            key: '_getElementOptions',
            value: function _getElementOptions() {
                return {
                    state: this.$element.is(':checked'),
                    size: this.$element.data('size'),
                    animate: this.$element.data('animate'),
                    disabled: this.$element.is(':disabled'),
                    readonly: this.$element.is('[readonly]'),
                    indeterminate: this.$element.data('indeterminate'),
                    inverse: this.$element.data('inverse'),
                    radioAllOff: this.$element.data('radio-all-off'),
                    onColor: this.$element.data('on-color'),
                    offColor: this.$element.data('off-color'),
                    onText: this.$element.data('on-text'),
                    offText: this.$element.data('off-text'),
                    labelText: this.$element.data('label-text'),
                    handleWidth: this.$element.data('handle-width'),
                    labelWidth: this.$element.data('label-width'),
                    baseClass: this.$element.data('base-class'),
                    wrapperClass: this.$element.data('wrapper-class')
                };
            }
        }, {
            key: '_width',
            value: function _width() {
                var _this2 = this;

                var $handles = this.$on.add(this.$off).add(this.$label).css('width', '');
                var handleWidth = this.options.handleWidth === 'auto' ? Math.round(Math.max(this.$on.width(), this.$off.width())) : this.options.handleWidth;
                $handles.width(handleWidth);
                this.$label.width(function (index, width) {
                    if (_this2.options.labelWidth !== 'auto') {
                        return _this2.options.labelWidth;
                    }
                    if (width < handleWidth) {
                        return handleWidth;
                    }
                    return width;
                });
                this._handleWidth = this.$on.outerWidth();
                this._labelWidth = this.$label.outerWidth();
                this.$container.width(this._handleWidth * 2 + this._labelWidth);
                return this.$wrapper.width(this._handleWidth + this._labelWidth);
            }
        }, {
            key: '_containerPosition',
            value: function _containerPosition() {
                var _this3 = this;

                var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.state;
                var callback = arguments[1];

                this.$container.css('margin-left', function () {
                    var values = [0, '-' + _this3._handleWidth + 'px'];
                    if (_this3.options.indeterminate) {
                        return '-' + _this3._handleWidth / 2 + 'px';
                    }
                    if (state) {
                        if (_this3.options.inverse) {
                            return values[1];
                        } else {
                            return values[0];
                        }
                    } else {
                        if (_this3.options.inverse) {
                            return values[0];
                        } else {
                            return values[1];
                        }
                    }
                });
            }
        }, {
            key: '_init',
            value: function _init() {
                var _this4 = this;

                var init = function init() {
                    _this4.setPrevOptions();
                    _this4._width();
                    _this4._containerPosition();
                    setTimeout(function () {
                        if (_this4.options.animate) {
                            return _this4.$wrapper.addClass(_this4._getClass('animate'));
                        }
                    }, 50);
                };
                if (this.$wrapper.is(':visible')) {
                    init();
                    return;
                }
                var initInterval = window.setInterval(function () {
                    if (_this4.$wrapper.is(':visible')) {
                        init();
                        return window.clearInterval(initInterval);
                    }
                }, 50);
            }
        }, {
            key: '_elementHandlers',
            value: function _elementHandlers() {
                var _this5 = this;

                return this.$element.on({
                    'setPreviousOptions.bootstrapSwitch': this.setPrevOptions.bind(this),

                    'previousState.bootstrapSwitch': function previousStateBootstrapSwitch() {
                        _this5.options = _this5.prevOptions;
                        if (_this5.options.indeterminate) {
                            _this5.$wrapper.addClass(_this5._getClass('indeterminate'));
                        }
                        _this5.$element.prop('checked', _this5.options.state).trigger('change.bootstrapSwitch', true);
                    },

                    'change.bootstrapSwitch': function changeBootstrapSwitch(event, skip) {
                        event.preventDefault();
                        event.stopImmediatePropagation();
                        var state = _this5.$element.is(':checked');
                        _this5._containerPosition(state);
                        if (state === _this5.options.state) {
                            return;
                        }
                        _this5.options.state = state;
                        _this5.$wrapper.toggleClass(_this5._getClass('off')).toggleClass(_this5._getClass('on'));
                        if (!skip) {
                            if (_this5.$element.is(':radio')) {
                                $('[name="' + _this5.$element.attr('name') + '"]').not(_this5.$element).prop('checked', false).trigger('change.bootstrapSwitch', true);
                            }
                            _this5.$element.trigger('switchChange.bootstrapSwitch', [state]);
                        }
                    },

                    'focus.bootstrapSwitch': function focusBootstrapSwitch(event) {
                        event.preventDefault();
                        _this5.$wrapper.addClass(_this5._getClass('focused'));
                    },

                    'blur.bootstrapSwitch': function blurBootstrapSwitch(event) {
                        event.preventDefault();
                        _this5.$wrapper.removeClass(_this5._getClass('focused'));
                    },

                    'keydown.bootstrapSwitch': function keydownBootstrapSwitch(event) {
                        if (!event.which || _this5.options.disabled || _this5.options.readonly) {
                            return;
                        }
                        if (event.which === 37 || event.which === 39) {
                            event.preventDefault();
                            event.stopImmediatePropagation();
                            _this5.state(event.which === 39);
                        }
                    }
                });
            }
        }, {
            key: '_handleHandlers',
            value: function _handleHandlers() {
                var _this6 = this;

                this.$on.on('click.bootstrapSwitch', function (event) {
                    event.preventDefault();
                    event.stopPropagation();
                    _this6.state(false);
                    return _this6.$element.trigger('focus.bootstrapSwitch');
                });
                return this.$off.on('click.bootstrapSwitch', function (event) {
                    event.preventDefault();
                    event.stopPropagation();
                    _this6.state(true);
                    return _this6.$element.trigger('focus.bootstrapSwitch');
                });
            }
        }, {
            key: '_labelHandlers',
            value: function _labelHandlers() {
                var _this7 = this;

                var handlers = {
                    click: function click(event) {
                        event.stopPropagation();
                    },


                    'mousedown.bootstrapSwitch touchstart.bootstrapSwitch': function mousedownBootstrapSwitchTouchstartBootstrapSwitch(event) {
                        if (_this7._dragStart || _this7.options.disabled || _this7.options.readonly) {
                            return;
                        }
                        event.preventDefault();
                        event.stopPropagation();
                        _this7._dragStart = (event.pageX || event.originalEvent.touches[0].pageX) - parseInt(_this7.$container.css('margin-left'), 10);
                        if (_this7.options.animate) {
                            _this7.$wrapper.removeClass(_this7._getClass('animate'));
                        }
                        _this7.$element.trigger('focus.bootstrapSwitch');
                    },

                    'mousemove.bootstrapSwitch touchmove.bootstrapSwitch': function mousemoveBootstrapSwitchTouchmoveBootstrapSwitch(event) {
                        if (_this7._dragStart == null) {
                            return;
                        }
                        var difference = (event.pageX || event.originalEvent.touches[0].pageX) - _this7._dragStart;
                        event.preventDefault();
                        if (difference < -_this7._handleWidth || difference > 0) {
                            return;
                        }
                        _this7._dragEnd = difference;
                        _this7.$container.css('margin-left', _this7._dragEnd + 'px');
                    },

                    'mouseup.bootstrapSwitch touchend.bootstrapSwitch': function mouseupBootstrapSwitchTouchendBootstrapSwitch(event) {
                        if (!_this7._dragStart) {
                            return;
                        }
                        event.preventDefault();
                        if (_this7.options.animate) {
                            _this7.$wrapper.addClass(_this7._getClass('animate'));
                        }
                        if (_this7._dragEnd) {
                            var state = _this7._dragEnd > -(_this7._handleWidth / 2);
                            _this7._dragEnd = false;
                            _this7.state(_this7.options.inverse ? !state : state);
                        } else {
                            _this7.state(!_this7.options.state);
                        }
                        _this7._dragStart = false;
                    },

                    'mouseleave.bootstrapSwitch': function mouseleaveBootstrapSwitch() {
                        _this7.$label.trigger('mouseup.bootstrapSwitch');
                    }
                };
                this.$label.on(handlers);
            }
        }, {
            key: '_externalLabelHandler',
            value: function _externalLabelHandler() {
                var _this8 = this;

                var $externalLabel = this.$element.closest('label');
                $externalLabel.on('click', function (event) {
                    event.preventDefault();
                    event.stopImmediatePropagation();
                    if (event.target === $externalLabel[0]) {
                        _this8.toggleState();
                    }
                });
            }
        }, {
            key: '_formHandler',
            value: function _formHandler() {
                var $form = this.$element.closest('form');
                if ($form.data('bootstrap-switch')) {
                    return;
                }
                $form.on('reset.bootstrapSwitch', function () {
                    window.setTimeout(function () {
                        $form.find('input').filter(function () {
                            return $(this).data('bootstrap-switch');
                        }).each(function () {
                            return $(this).bootstrapSwitch('state', this.checked);
                        });
                    }, 1);
                }).data('bootstrap-switch', true);
            }
        }, {
            key: '_getClass',
            value: function _getClass(name) {
                return this.options.baseClass + '-' + name;
            }
        }, {
            key: '_getClasses',
            value: function _getClasses(classes) {
                if (!$.isArray(classes)) {
                    return [this._getClass(classes)];
                }
                return classes.map(this._getClass.bind(this));
            }
        }]);

        return BootstrapSwitch;
    }();

    $.fn.bootstrapSwitch = function (option) {
        for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
            args[_key2 - 1] = arguments[_key2];
        }

        function reducer(ret, next) {
            var $this = $(next);
            var existingData = $this.data('bootstrap-switch');
            var data = existingData || new BootstrapSwitch(next, option);
            if (!existingData) {
                $this.data('bootstrap-switch', data);
            }
            if (typeof option === 'string') {
                return data[option].apply(data, args);
            }
            return ret;
        }
        return Array.prototype.reduce.call(this, reducer, this);
    };
    $.fn.bootstrapSwitch.Constructor = BootstrapSwitch;
    $.fn.bootstrapSwitch.defaults = {
        state: true,
        size: null,
        animate: true,
        disabled: false,
        readonly: false,
        indeterminate: false,
        inverse: false,
        radioAllOff: false,
        onColor: 'primary',
        offColor: 'default',
        onText: 'ON',
        offText: 'OFF',
        labelText: '&nbsp',
        handleWidth: 'auto',
        labelWidth: 'auto',
        baseClass: 'bootstrap-switch',
        wrapperClass: 'wrapper',
        onInit: function onInit() {},
        onSwitchChange: function onSwitchChange() {}
    };
});

按文件名保存即可。

基本使用

首先在HTML的head标签里引入相关插件,这里也引入jquery:

  <head>
  
    <title>bootstrap demo</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" > 
      <!-- 引入 Bootstrap -->
      <link href="./css/bootstrap.min.css" rel="stylesheet">
      <link rel="stylesheet" href="./css/bootstrap-switch.min.css">
      <!-- HTML5 Shiv 和 Respond.js 用于让 IE8 支持 HTML5元素和媒体查询 -->
      <!-- 注意: 如果通过 file://  引入 Respond.js 文件,则该文件无法起效果 -->
      <!--[if lt IE 9]>
         <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
         <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
      <![endif]-->
      <!-- jQuery (Bootstrap 的 JavaScript 插件需要引入 jQuery) -->
      <script>
              window.$ = window.jQuery = require('./js/jquery-3.3.1.min.js');
      </script>
      <!-- 包括所有已编译的插件 -->
	  <script src="./js/popper.min.js"></script>   	
      <script src="./js/bootstrap.min.js"></script>  
      <script src="js/bootstrap-switch.min.js"></script>    

  </head>

然后定义HTML元素:

<div class="container" >
                            <div class="row">                                                
                                 <div class="col-sm-1"> 
                                   <input type="radio" id="test">
                                 </div>         
						    </div> 
</div> 

再定义js的部分即可(特性参数及响应函数):

	 $("input#test").bootstrapSwitch({
	    onText:"ON",  
	    offText:"OFF",  
	    onColor:"success",  
	    offColor:"danger",  
	    size:"small", 
	    radioAllOff:true, //switch on and switch off circle enable
        onSwitchChange:function(event,state){ 			
	        if(state==true){  
	           console.log('Opened'); 
	        }else{  
	           console.log('Closed');  
	        }  
	    }  
	});

注意事项

radioAllOff参数默认为false,也就是按钮只能点击一次从初始的off态切换到on态,再点就不响应了。因此要将radioAllOff参数设置为true,才能来回的切换两种状态。

属性说明

可根据属性控制滑动开关的特性:
在这里插入图片描述

–End–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PegasusYu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值