首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何开始旋转引导字体可怕的图标,然后让它停止使用jQuery

问如何开始旋转引导字体可怕的图标,然后让它停止使用jQuery
EN

Stack Overflow用户
提问于 2015-11-14 15:26:31
回答 3查看 4.2K关注 0票数 5

我有一个网页上的字体可怕的刷新图标,我正在工作。

代码语言:javascript
复制
<i class="fa fa-refresh fa-3x" id="lock-refresh"></i>

当这个图标被点击,我希望它开始旋转。我能够通过在我的JavaScript文件中输入以下内容来实现这一点:

代码语言:javascript
复制
$( '#lock-refresh' ).click(function() {
    $( this ).addClass( 'fa-spin' ).

    //Below is a function that I need to run after the FA icon is clicked.
    startup();
});

不过,我只需要这个图标旋转几秒钟。我尝试将这个(下面)添加到我的JS文件中,但是当我这样做时,图标根本不会旋转:

代码语言:javascript
复制
$( '#lock-refresh' ).click(function() {
    $( this ).addClass( 'fa-spin' );

    //Trying to remove the class after 1000 milliseconds. Not working.
    $( this ).delay(1000).removeClass( 'fa-spin' );
    startup();
});

我还尝试了以下几种方法,但它们也不起作用:

代码语言:javascript
复制
$( '#lock-refresh' ).click(function() {
    $( this ).addClass( 'fa-spin' ).delay(1000).removeClass( 'fa-spin' );
    startup();
});

我也尝试了以下方法,但当我这样做时,图标开始旋转,但不会停止:

代码语言:javascript
复制
$( '#lock-refresh' ).click(function() {
    $( this ).addClass( 'fa-spin' );

    //Trying to use setTimeout, but doesn't seem to work either.
    setTimeout(function() { $( this ).removeClass( 'fa-spin' ); }, 1000);
    startup();
});

在没有startup()函数的情况下,我尝试了以上所有的方法,并且它产生了相同的结果,所以我确信它不是这个函数。

如何才能让我的FA刷新图标旋转一两秒钟,然后停止?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-14 15:30:56

你应该这样做:

代码语言:javascript
复制
$( '#lock-refresh' ).click(function() {
    $( this ).addClass( 'fa-spin' );
    var $el = $(this);
    setTimeout(function() { $el.removeClass( 'fa-spin' ); }, 1000);
    startup();
    // Whatever here.
});

因为this是setTimeout(function(){中的其他东西,没有指向单击的元素。

工频

查询的CSS操作没有排队,但可以在“fx”队列中执行,方法是:

代码语言:javascript
复制
 $( '#lock-refresh' ).click(function() {
        $(this).addClass("fa-spin").delay(1000).queue('fx', function() { $(this).removeClass('fa-spin'); });
        startup();
        // Whatever here.
 });

工频

票数 5
EN

Stack Overflow用户

发布于 2015-11-14 15:30:42

在这种情况下,您不能使用delay方法,因为addClass不会返回队列接口来处理延迟。

因此,您确实应该使用setTimeout,但在内部使用正确的this值。问题是setTimeout将在全局对象(this === window)上下文中执行回调函数。所以你需要提供一个合适的背景。为此,可以方便地使用Function.prototype.bind方法:

代码语言:javascript
复制
$( '#lock-refresh' ).click(function() {
    $( this ).addClass( 'fa-spin' );
    setTimeout(function() { 
        $( this ).removeClass( 'fa-spin' ); 
    }.bind(this), 1000);
    startup();
});
票数 5
EN

Stack Overflow用户

发布于 2015-11-14 15:34:01

这样做(注意:使用setTimout而不是setInterval,我的坏) https://jsfiddle.net/c7276oww/

代码语言:javascript
复制
$( '#lock-refresh' ).click(function() {
    $( this ).addClass( 'fa-spin' );
    setTimeout(function(){ $( '#lock-refresh' ).removeClass( 'fa-spin' ); }, 3000);
    //Below is a function that I need to run after the FA icon is clicked.
    startup();
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33709964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档