ChatGPT解决这个技术问题 Extra ChatGPT

如何在按钮处于加载状态时向按钮添加微调器图标?

Twitter Bootstrap's buttons 有一个很好的 Loading... 状态可用。

问题是它只显示像 Loading... 这样通过 data-loading-text 属性传递的消息,如下所示:

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

查看 Font Awesome,您会看到现在有一个 animated spinner icon

我尝试在触发 Upload 操作时集成该微调器图标,如下所示:

$("#btnStartUploads").button('loading');
$("#btnStartUploads i").removeAttr('class');
$("#btnStartUploads i").addClass('icon-spinner icon-spin icon-large');

但这根本没有效果,也就是说,我只看到按钮上的 Uploading... 文本。

按钮处于加载状态时是否可以添加图标?看起来 Bootstrap 只是在处于加载状态时删除了按钮内的图标 <i class="icon-upload icon-large"></i>

这是一个简单的 demo,它显示了我在上面描述的行为。如您所见,当它进入 Loading 状态时,图标就消失了。它会在时间间隔之后重新出现。

您可以查看我为微调器外观设置动画的解决方案:stackoverflow.com/questions/15982233/…
我建议使用这种方法 stackoverflow.com/a/15988830/437690

u
user664833

使用 CSS3 动画的 Bootstrap 3 的简单解决方案。

将以下内容放入您的 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); }
}

然后只需在加载时将 spinning 类添加到 glyphicon 即可获得旋转图标:

<button class="btn btn-lg btn-warning">
    <span class="glyphicon glyphicon-refresh spinning"></span> Loading...    
</button>

基于 http://www.bootply.com/128062#

注意:IE9 及以下不支持 CSS3 动画。


不应该是 animation 而不是 -animation 吗?
优秀的解决方案。我在桌面和 iPad 上的 Safari 中遇到了这个动画的问题。它显示图标但不为其设置动画。有没有经历过这样的事情?
@JayhawksFan93 是的,我最近在 IE 中注意到了同样的情况。很快就会调查
答案已更新为 animation 而不是 -animation。对我来说,FF 和 IE 的变化很好。 Firefox 动画虽然看起来不是很流畅。
+1。找到一个类似的 here.... 发布记录...
S
Shahzad Barkati

如果您查看 bootstrap-button.js 源代码,您会看到引导插件在调用 $(myElem).button('loading') 时将按钮内部 html 替换为 data-loading-text 中的任何内容。

对于您的情况,我认为您应该能够做到这一点:

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

很好用的gurch101!我忘记了可以将 HTML 与标签属性中的文本混合使用。 :-)
Fiddle 不适用于 Mac OS X 上的 Safari 6.0.5 (7536.30.1)、Chrome 31.0.1604.0 canary。
已修复:jsfiddle.net/6U5q2/270 请注意,这是针对 v2.3.2 的。不知道它是否适用于 3.x
data-loading-text 自 v3.3.5 起已弃用,并将在 v4 中删除。
@Jonathan 如果在 v3.3.5 中已弃用它,那么在 v3.3.5 和 v4 之后的替代品是什么?
r
raveren

现在有一个成熟的插件:

http://msurguy.github.io/ladda-bootstrap/


嗨@Eru Penkman。你的和原来的有什么区别?
嘿,伊万,排序,但我从来没有时间更新我的 ladda 副本!这只是原版,我删除了我之前的评论。对于那个很抱歉!
j
jake

要使@flion 的解决方案看起来非常棒,您可以调整该图标的中心点,使其不会上下晃动。这看起来适合我的小字体:

.glyphicon-refresh.spinning {
  transform-origin: 48% 50%;
}

.glyphicon-refresh.spinning { transform-origin: 50% 58%; } 为我工作
嗯,{ transform-origin: 50% 49%; } 在我使用 cog 的情况下解决。
我也注意到了摆动,但改变这些数字的理由是什么?我应该如何调整它们?
V
Volomike

一个懒惰的方法是使用半圆 \25E0(又名 &#x25e0;)的 UTF-8 实体代码,它看起来像 ◠,然后为其设置关键帧动画。这很简单:

.busy { 动画:旋转 1s 无限线性;显示:内联块;字体粗细:粗体;字体系列:无衬线;字体大小:35px;字体样式:正常;颜色:#555; } .busy::before { 内容:"\25E0"; } @keyframes spin { 0% {transform: rotate(0deg);} 100% {transform: rotate(359deg);} }


m
mikemsq

这是我对 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);

JSFiddle 上查看


D
Damiano

这些是我的,基于纯 SVG 和 CSS 动画。不要关注下面代码片段中的 JS 代码,它只是用于演示目的。随意根据我的自定义制作您的自定义,这非常容易。

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( "圆") .attr("类", 动画) .attr("cx", x) .attr("cy", y+40) .attr("r", 16) });圈{填充:无;中风:#bbb; stroke-width: 4 } .basic { 动画:基本 0.5s 线性无限;中风破折号:20 80; } @keyframes basic { 0% {stroke-dashoffset: 100;} 100% {stroke-dashoffset: 0;} } .basic2 { 动画:basic2 0.5s 线性无限;中风破折号:80 20; } @keyframes basic2 { 0% {stroke-dashoffset: 100;} 100% {stroke-dashoffset: 0;} } .basic3 { 动画:basic3 0.5s 线性无限;中风破折号:20 30; } @keyframes basic3 { 0% {stroke-dashoffset: 100;} 100% {stroke-dashoffset: 0;} } .basic4 { 动画:basic4 0.5s 线性无限;中风破折号:10 23.3; } @keyframes basic4 { 0% {stroke-dashoffset: 100;} 100% {stroke-dashoffset: 0;} } .loading { 动画:加载 1s 线性无限;冲程-dashoffset:25; } @keyframes 加载 { 0% {stroke-dashoffset: 0;中风破折号:50 0; } 50% {stroke-dashoffset: -100; stroke-dasharray: 0 50;} 100% { stroke-dashoffset: -200;stroke-dasharray: 50 0;} } .loading2 { 动画:loading2 1s 线性无限; } @keyframes loading2 { 0% {stroke-dasharray: 5 28.3;中风破折号:75;} 50% {中风破折号:45 5;中风破折号:-50;} 100% {中风破折号:5 28.3;冲程-dashoffset:-125; } } .spin { 动画:旋转 1s 线性无限;冲程-dashoffset:25; } @keyframes spin { 0% {stroke-dashoffset: 0;中风破折号:33.3 0; } 50% {stroke-dashoffset: -100; stroke-dasharray: 0 33.3;} 100% { stroke-dashoffset: -200;stroke-dasharray: 33.3 0;} } .chrome { 动画:chrome 2s 线性无限; } @keyframes chrome { 0% {stroke-dasharray: 0 100;中风破折号:25;} 25% {中风破折号:75 25;中风破折号:0;} 50% {中风破折号:0 100;中风破折号:-125;} 75% {中风破折号:75 25;中风破折号:-150;} 100% {中风破折号:0 100; stroke-dashoffset: -275;} } .chrome2 { 动画:chrome2 1s 线性无限; } @keyframes chrome2 { 0% {stroke-dasharray: 0 100;中风破折号:25;} 25% {中风破折号:50 50;中风破折号:0;} 50% {中风破折号:0 100;中风破折号:-50;} 75% {中风破折号:50 50;中风破折号:-125;} 100% {中风破折号:0 100; stroke-dashoffset: -175;} } .flower { 动画:花 1s 线性无限; } @keyframes 花 { 0% {stroke-dasharray: 0 20;中风破折号:25;} 50% {中风破折号:20 0;中风破折号:-50;} 100% {中风破折号:0 20; stroke-dashoffset: -125;} } .flower2 { 动画:flower2 1s 线性无限; } @keyframes flower2 { 0% {stroke-dasharray: 5 20;中风破折号:25;} 50% {中风破折号:20 5;中风破折号:-50;} 100% {中风破折号:5 20; stroke-dashoffset: -125;} } .backstreet_boys { 动画:backstreet_boys 3s 线性无限; } @keyframes backstreet_boys { 0% {stroke-dasharray: 5 28.3;中风破折号:-225;} 15% {中风破折号:5 28.3;中风破折号:-300;} 30% {中风破折号:5 20;中风破折号:-300;} 45% {中风破折号:5 20;中风破折号:-375;} 60% {中风破折号:5 15;中风破折号:-375;} 75% {中风破折号:5 15;中风破折号:-450;} 90% {中风破折号:5 15;中风破折号:-525;} 100% {中风破折号:5 28.3; stroke-dashoffset: -925;} }

也可在 CodePen 上使用:https://codepen.io/anon/pen/PeRazr


B
Brendan Weinstein

这是一个受 Bulma 启发的成熟的 css 解决方案。只需添加

    .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;
    }

C
Colin

我发现唯一有效的是这里的帖子:https://stackoverflow.com/a/44548729/9488229

我对其进行了改进,现在它提供了所有这些功能:

单击后禁用按钮

使用本机引导程序显示动画加载图标

页面加载完成后重新启用按钮

页面加载完成后文本恢复原状

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;
    });
});

欢迎来到堆栈溢出。我没有看到您在哪里使用了 Andreas 使用的解决方案,并且我没有在提供的代码中看到按钮重新启用或恢复的位置。
你是对的,这是另一个答案,我已经更新了链接。至于按钮如何重新启用,它可以工作。我认为这与它在 setTimeout() 函数内被禁用的事实有关,即当页面完成加载时,该函数内发生的所有事情都将被撤消。这是一个非常干净的解决方案。
可能是 Bootstrap 正在处理重新启用和文本恢复。尝试在测试页面上不使用 Bootstrap JavaScript 运行此代码。
这对我使用表单提交按钮很有用。
G
GucciBananaKing99

您可以使用 Bootstrap 微调器。使用“位置:绝对”使两个按钮相互重叠。使用 JavaScript 代码,您可以删除前面的按钮,然后将显示后面的按钮。

按钮{位置:绝对;顶部:50px;左:150px;宽度:150px;字体大小:120%;填充:5px;背景:#B52519;颜色:#EAEAEA;边框:无;边距:120px;边框半径:5px;显示:弯曲;对齐内容:居中;证明内容:中心;过渡:全部0.5s;高度:40px } #orderButton:hover { 颜色:#c8c8c8; }


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅