Maison > Article > interface Web > Utilisation du plugin de bouton dans Bootstrap
Le plug-in de bouton fournit un ensemble de fonctions qui peuvent contrôler plusieurs états du bouton, tels que l'état désactivé du bouton, l'état de chargement, l'état normal, etc. Cet article présentera le plug-in du bouton Bootstrap
en détail. Vous pouvez concevoir des invites d'état via des boutons Lorsque vous cliquez sur le bouton, les informations sur l'état de chargement seront affichées. Par exemple, cliquer sur le bouton "Charger" déclenchera l'état de chargement du bouton
En ajoutant data-loading-text="Loading..."
vous pouvez définir l'état de chargement du bouton, mais à partir de la v3.3.5, cette fonctionnalité n'est plus disponible Il est recommandé d'utiliser et a été supprimé dans la version v4
[Remarque] Si data-loading-text
n'est pas défini, lorsque le texte du bouton est en état de chargement, l'affichage par défaut est 'loading...'
<button class="btn btn-primary" data-loading-text="正在加载中,请稍等..." type="button" id="loaddingBtn">加载</button><script>$(function(){ $("#loaddingBtn").click(function () {var $btn = $(this).button("loading"); setTimeout(function(){ $btn.button('reset') },1000); }); }); </script>
Le bouton radio de simulation consiste à mettre en œuvre une opération de sélection unique via un ensemble de boutons. L'utilisation d'un groupe de boutons pour simuler un groupe de boutons radio peut rendre la conception plus personnalisée et personnaliser un groupe de boutons radio plus beau
Dans le plug-in de bouton du framework Bootstrap, vous pouvez personnaliser les attributs du groupe de boutons data-toggle="buttons"
<div class="btn-group" data-toggle="buttons"><label class="btn btn-primary"><input type="radio" name="options" id="options1">男</label><label class="btn btn-primary"><input type="radio" name="options" id="options2">女</label></div>
Utiliser des groupes de boutons pour simuler des boutons à cocher C'est le même que le bouton radio simulé et a le même effet. Il est également obtenu en personnalisant data-toggle="buttons"
sur le groupe de boutons. La seule différence est de remplacer input[type="radio"] par input[type="checkbox"]
<div class="btn-group" data-toggle="buttons"><label class="btn btn-primary"><input type="checkbox" name="options" id="options1">电影</label><label class="btn btn-primary"><input type="checkbox" name="options" id="options2">音乐</label><label class="btn btn-primary"><input type="checkbox" name="options" id="options3">游戏</label><label class="btn btn-primary"><input type="checkbox" name="options" id="options4">摄影</label></div>
L'utilisation de l'attribut data-toggle peut également activer l'état de comportement du bouton pour basculer l'état entre activé et inactif. Cliquez pour activer le bouton, puis cliquez à nouveau pour restaurer le bouton à son état par défaut
<button type="button" data-toggle="button" class="btn btn-primary">有状态的按钮</button><button type="button" class="btn btn-primary">普通按钮</button>
Le plug-in bouton peut obtenir différents effets en appelant la fonction bouton, puis en transmettant des paramètres spécifiques à la fonction bouton. Deux des paramètres sont fixes, à savoir basculer et réinitialiser. D'autres peuvent être définis à volonté :
$("#mybutton").button("toggle");//反转按钮状态 $("#mybutton").button("reset");//重置按钮状态 $("#mybutton").button("任意字符参数名");//替换 data-任意字符参数名-text 的属性值为“按钮上显示的文本值
<button class="btn btn-primary" data-complete-text="加载完成" type="button" id="mybutton">加载</button><script>$(function(){ $("#mybutton").click(function () {var $btn = $(this).button("loading"); setTimeout(function(){ $btn.button('complete'); },1000); }); }); </script>
【1】IIFE
Utilisez la fonction d'appel immédiat pour empêcher le code du plug-in de fuir, formant ainsi une boucle fermée, et ne peut être étendu qu'à partir du fn de jQuery
+function ($) {//使用es5严格模式'use strict';//}(window.jQuery);
【2】Paramètres initiaux
var Button = function (element, options) {//要触发的元素this.$element = $(element)//合并参数this.options = $.extend({}, Button.DEFAULTS, options)//是否是加载状态this.isLoading = false } //版本号为3.3.7 Button.VERSION = '3.3.7' //默认loadinf时的文本内容为'loading...' Button.DEFAULTS = { loadingText: 'loading...' }
【3】Code principal du plug-in
//设置按钮状态的方法 Button.prototype.setState = function (state) {//按钮需要禁用时使用它,先赋值一个临时变量var d = 'disabled'//当前元素var $el = this.$element//如果是input,则使用val获取值,否则,使用html获取值var val = $el.is('input') ? 'val' : 'html'//获取当前元素的自定义属性,所有以data-开头的属性var data = $el.data()//组装需要用到的属性,如传入loading,则组装成loadingTextstate += 'Text'//如果data里不包含data-reset-text值,则将当前元素的值临时存放,以便过后再恢复使用它if (data.resetText == null) $el.data('resetText', $el[val]())//不阻止事件,以允许表单的提交setTimeout($.proxy(function () { //给元素赋值,如果是元素默认没有值,则从options里查询,否则,从自定义属性里查询 $el[val](data[state] == null ? this.options[state] : data[state]) //如果传入的是loading if (state == 'loadingText') {//设置加载状态为truethis.isLoading = true//禁用该元素(即添加disabled样式和disabled属性)$el.addClass(d).attr(d, d).prop(d, true) } else if (this.isLoading) {this.isLoading = false//如果不是,则删除disabled样式和disabled属性$el.removeClass(d).removeAttr(d).prop(d, false) } }, this), 0) } //切换按钮状态 Button.prototype.toggle = function () {//设置change标记var changed = true//查找带有[data-toggle="buttons"]属性的最近父元素var $parent = this.$element.closest('[data-toggle="buttons"]')//如果父元素存在if ($parent.length) { //查找触发元素内是否存在input元素 var $input = this.$element.find('input') //如果是单选按钮 if ($input.prop('type') == 'radio') {//如果被选中,则设置changed为falseif ($input.prop('checked')) changed = false//查找同级元素是否有active样式,如果有,则删除active样式$parent.find('.active').removeClass('active')//给当前元素添加active样式this.$element.addClass('active') //如果是多选按钮 } else if ($input.prop('type') == 'checkbox') {//如果多选按钮选中了,但元素没有active样式//或者多选按钮没有选中,但元素却有active样式,则设置changed为falseif (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false//重置元素的active样式this.$element.toggleClass('active') } //将多选按钮的checked设置为是否有active样式 $input.prop('checked', this.$element.hasClass('active')) //如果changed为true,则触发change事件 if (changed) $input.trigger('change') } else { this.$element.attr('aria-pressed', !this.$element.hasClass('active')) //重置元素的active样式 this.$element.toggleClass('active') } }
【4】 Définition du plug-in jQuery
function Plugin(option) {//根据选择器,遍历所有符合规则的元素return this.each(function () { var $this = $(this) //获取自定义属性bs.button的值 var data = $this.data('bs.button') var options = typeof option == 'object' && option //如果值不存在,则将Button实例设置为bs.button值 if (!data) $this.data('bs.button', (data = new Button(this, options))) //如果option是toggle,则直接调用该方法 if (option == 'toggle') data.toggle() //否则调用setState()方法 else if (option) data.setState(option) }) } var old = $.fn.button //保留其他库的$.fn.button代码(如果定义的话),以便在noConflict之后可以继续使用该老代码 $.fn.button = Plugin //重设插件构造器,可以通过该属性获取插件的真实类函数 $.fn.button.Constructor = Button
【5】Traitement anti-conflit
$.fn.button.noConflict = function () {//恢复以前的旧代码$.fn.button = old//将$.fn.button.noConflict()设置为Bootstrap的Tab插件return this }
【 6】Événement déclencheur de liaison
$(document)//查询所有以button开头,data-toggle属性的值,绑定click事件.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { //查找当前单击对象的最近的有btn样式的父元素 var $btn = $(e.target).closest('.btn') Plugin.call($btn, 'toggle') //如果单击对象不是单选或多选按钮 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {//阻止默认行为 e.preventDefault()//如果$btn是单选或多选按钮,触发focus事件if ($btn.is('input,button')) $btn.trigger('focus')//否则,找到子元素中的第一个具有visible状态的input或button,触发focus事件else $btn.find('input:visible,button:visible').first().trigger('focus') } })//查询所有以button开头,data-toggle属性的值,绑定focus事件.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) })
[Recommandations de cours associées : Tutoriel Bootstrap]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!