Les boutons de Twitter Bootstrap ont un bon Loading...
état disponible.
Le fait est qu'il montre juste un message comme Loading...
passé par l' data-loading-text
attribut comme ceci:
<button type="button" class="btn btn-primary start" id="btnStartUploads"
data-loading-text="@Localization.Uploading">
<i class="icon-upload icon-large"></i>
<span>@Localization.StartUpload</span>
</button>
En regardant Font Awesome, vous voyez qu'il y a maintenant une icône de spinner animée .
J'ai essayé d'intégrer cette icône de spinner lors du lancement d'une Upload
opération comme celle-ci:
$("#btnStartUploads").button('loading');
$("#btnStartUploads i").removeAttr('class');
$("#btnStartUploads i").addClass('icon-spinner icon-spin icon-large');
mais cela n'a eu aucun effet, c'est-à-dire que je vois juste le Uploading...
texte sur le bouton.
Est-il possible d'ajouter une icône lorsque le bouton est à l'état Chargement? On dirait que Bootstrap supprime simplement l'icône <i class="icon-upload icon-large"></i>
à l'intérieur du bouton lorsqu'il est à l'état de chargement.
Voici une démo simple qui montre le comportement que je décris ci-dessus. Comme vous le voyez quand il entre dans l'état de chargement, l'icône disparaît simplement. Il réapparaît juste après l'intervalle de temps.
la source
Réponses:
Si vous regardez la source bootstrap-button.js , vous verrez que le plugin bootstrap remplace les boutons html internes par tout ce qui se trouve dans le data-loading-text lors de l'appel
$(myElem).button('loading')
.Pour votre cas, je pense que vous devriez simplement pouvoir le faire:
<button type="button" class="btn btn-primary start" id="btnStartUploads" data-loading-text="<i class='icon-spinner icon-spin icon-large'></i> @Localization.Uploading"> <i class="icon-upload icon-large"></i> <span>@Localization.StartUpload</span> </button>
la source
HTML
avec du texte dans une propriété de balise. :-)data-loading-text
est obsolète depuis la v3.3.5 et sera supprimée dans la v4.Solution simple pour Bootstrap 3 utilisant des animations CSS3.
Mettez ce qui suit dans votre CSS:
.glyphicon.spinning { animation: spin 1s infinite linear; -webkit-animation: spin2 1s infinite linear; } @keyframes spin { from { transform: scale(1) rotate(0deg); } to { transform: scale(1) rotate(360deg); } } @-webkit-keyframes spin2 { from { -webkit-transform: rotate(0deg); } to { -webkit-transform: rotate(360deg); } }
Ensuite, ajoutez simplement la
spinning
classe à unglyphicon
moment de chargement pour obtenir votre icône en rotation:<button class="btn btn-lg btn-warning"> <span class="glyphicon glyphicon-refresh spinning"></span> Loading... </button>
Basé sur http://www.bootply.com/128062#
la source
animation
et non-animation
?animation
lieu de-animation
. Avec ce changement bien dans FF et IE pour moi. L'animation de Firefox n'a cependant pas l'air très fluide.Il existe maintenant un plugin à part entière pour cela:
http://msurguy.github.io/ladda-bootstrap/
la source
Pour que la solution de @flion soit vraiment géniale, vous pouvez ajuster le point central de cette icône afin qu'elle ne vacille pas de haut en bas. Cela me semble parfait avec une petite taille de police:
.glyphicon-refresh.spinning { transform-origin: 48% 50%; }
la source
.glyphicon-refresh.spinning { transform-origin: 50% 58%; }
travaillé pour moi{ transform-origin: 50% 49%; }
résolvez dans mon cas où j'utilise à lacog
place.Voici ma solution pour Bootstrap 4:
<button id="search" class="btn btn-primary" data-loading-text="<i class='fa fa-spinner fa-spin fa-fw' aria-hidden='true'></i>Searching"> Search </button> var setLoading = function () { var search = $('#search'); if (!search.data('normal-text')) { search.data('normal-text', search.html()); } search.html(search.data('loading-text')); }; var clearLoading = function () { var search = $('#search'); search.html(search.data('normal-text')); }; setInterval(() => { setLoading(); setTimeout(() => { clearLoading(); }, 1000); }, 2000);
Découvrez-le sur JSFiddle
la source
Ce sont les miens, basés sur des animations SVG et CSS pures. Ne faites pas attention au code JS dans l'extrait ci-dessous, c'est juste à des fins de démonstration. N'hésitez pas à en créer des personnalisés en vous basant sur le mien, c'est super facile.
var svg = d3.select("svg"), columnsCount = 3; ['basic', 'basic2', 'basic3', 'basic4', 'loading', 'loading2', 'spin', 'chrome', 'chrome2', 'flower', 'flower2', 'backstreet_boys'].forEach(function(animation, i){ var x = (i%columnsCount+1) * 200-100, y = 20 + (Math.floor(i/columnsCount) * 200); svg.append("text") .attr('text-anchor', 'middle') .attr("x", x) .attr("y", y) .text((i+1)+". "+animation); svg.append("circle") .attr("class", animation) .attr("cx", x) .attr("cy", y+40) .attr("r", 16) });
circle { fill: none; stroke: #bbb; stroke-width: 4 } .basic { animation: basic 0.5s linear infinite; stroke-dasharray: 20 80; } @keyframes basic { 0% {stroke-dashoffset: 100;} 100% {stroke-dashoffset: 0;} } .basic2 { animation: basic2 0.5s linear infinite; stroke-dasharray: 80 20; } @keyframes basic2 { 0% {stroke-dashoffset: 100;} 100% {stroke-dashoffset: 0;} } .basic3 { animation: basic3 0.5s linear infinite; stroke-dasharray: 20 30; } @keyframes basic3 { 0% {stroke-dashoffset: 100;} 100% {stroke-dashoffset: 0;} } .basic4 { animation: basic4 0.5s linear infinite; stroke-dasharray: 10 23.3; } @keyframes basic4 { 0% {stroke-dashoffset: 100;} 100% {stroke-dashoffset: 0;} } .loading { animation: loading 1s linear infinite; stroke-dashoffset: 25; } @keyframes loading { 0% {stroke-dashoffset: 0; stroke-dasharray: 50 0; } 50% {stroke-dashoffset: -100; stroke-dasharray: 0 50;} 100% { stroke-dashoffset: -200;stroke-dasharray: 50 0;} } .loading2 { animation: loading2 1s linear infinite; } @keyframes loading2 { 0% {stroke-dasharray: 5 28.3; stroke-dashoffset: 75;} 50% {stroke-dasharray: 45 5; stroke-dashoffset: -50;} 100% {stroke-dasharray: 5 28.3; stroke-dashoffset: -125; } } .spin { animation: spin 1s linear infinite; stroke-dashoffset: 25; } @keyframes spin { 0% {stroke-dashoffset: 0; stroke-dasharray: 33.3 0; } 50% {stroke-dashoffset: -100; stroke-dasharray: 0 33.3;} 100% { stroke-dashoffset: -200;stroke-dasharray: 33.3 0;} } .chrome { animation: chrome 2s linear infinite; } @keyframes chrome { 0% {stroke-dasharray: 0 100; stroke-dashoffset: 25;} 25% {stroke-dasharray: 75 25; stroke-dashoffset: 0;} 50% {stroke-dasharray: 0 100; stroke-dashoffset: -125;} 75% {stroke-dasharray: 75 25; stroke-dashoffset: -150;} 100% {stroke-dasharray: 0 100; stroke-dashoffset: -275;} } .chrome2 { animation: chrome2 1s linear infinite; } @keyframes chrome2 { 0% {stroke-dasharray: 0 100; stroke-dashoffset: 25;} 25% {stroke-dasharray: 50 50; stroke-dashoffset: 0;} 50% {stroke-dasharray: 0 100; stroke-dashoffset: -50;} 75% {stroke-dasharray: 50 50; stroke-dashoffset: -125;} 100% {stroke-dasharray: 0 100; stroke-dashoffset: -175;} } .flower { animation: flower 1s linear infinite; } @keyframes flower { 0% {stroke-dasharray: 0 20; stroke-dashoffset: 25;} 50% {stroke-dasharray: 20 0; stroke-dashoffset: -50;} 100% {stroke-dasharray: 0 20; stroke-dashoffset: -125;} } .flower2 { animation: flower2 1s linear infinite; } @keyframes flower2 { 0% {stroke-dasharray: 5 20; stroke-dashoffset: 25;} 50% {stroke-dasharray: 20 5; stroke-dashoffset: -50;} 100% {stroke-dasharray: 5 20; stroke-dashoffset: -125;} } .backstreet_boys { animation: backstreet_boys 3s linear infinite; } @keyframes backstreet_boys { 0% {stroke-dasharray: 5 28.3; stroke-dashoffset: -225;} 15% {stroke-dasharray: 5 28.3; stroke-dashoffset: -300;} 30% {stroke-dasharray: 5 20; stroke-dashoffset: -300;} 45% {stroke-dasharray: 5 20; stroke-dashoffset: -375;} 60% {stroke-dasharray: 5 15; stroke-dashoffset: -375;} 75% {stroke-dasharray: 5 15; stroke-dashoffset: -450;} 90% {stroke-dasharray: 5 15; stroke-dashoffset: -525;} 100% {stroke-dasharray: 5 28.3; stroke-dashoffset: -925;} }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script> <svg width="600px" height="700px"></svg>
Également disponible sur CodePen: https://codepen.io/anon/pen/PeRazr
la source
Voici une solution css à part entière inspirée de Bulma. Ajoutez simplement
.button { display: inline-flex; align-items: center; justify-content: center; position: relative; min-width: 200px; max-width: 100%; min-height: 40px; text-align: center; cursor: pointer; } @-webkit-keyframes spinAround { from { -webkit-transform: rotate(0deg); transform: rotate(0deg); } to { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } @keyframes spinAround { from { -webkit-transform: rotate(0deg); transform: rotate(0deg); } to { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } .button.is-loading { text-indent: -9999px; box-shadow: none; font-size: 1rem; height: 2.25em; line-height: 1.5; vertical-align: top; padding-bottom: calc(0.375em - 1px); padding-left: 0.75em; padding-right: 0.75em; padding-top: calc(0.375em - 1px); white-space: nowrap; } .button.is-loading::after { -webkit-animation: spinAround 500ms infinite linear; animation: spinAround 500ms infinite linear; border: 2px solid #dbdbdb; border-radius: 290486px; border-right-color: transparent; border-top-color: transparent; content: ""; display: block; height: 1em; position: relative; width: 1em; }
la source
La seule chose que j'ai trouvée qui fonctionnait était un post ici: https://stackoverflow.com/a/44548729/9488229
Je l'ai amélioré, et maintenant il offre toutes ces fonctionnalités:
Javascript:
$(document).ready(function () { $('.btn').on('click', function() { var e=this; setTimeout(function() { e.innerHTML='<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> Searching...'; e.disabled=true; },0); return true; }); });
la source