如何开始旋转 bootstrap 字体真棒图标,然后用 jQuery 停止
How to start spinning a bootstrap font awesome icon, then make it stop with jQuery
我正在处理的网页上有很棒的字体刷新图标。
<i class="fa fa-refresh fa-3x" id="lock-refresh"></i>
单击此图标时,我希望它开始旋转。我已经能够通过在我的 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 文件中,但是当我这样做时图标根本不旋转:
$( '#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();
});
我也试过以下方法,但效果不佳:
$( '#lock-refresh' ).click(function() {
$( this ).addClass( 'fa-spin' ).delay(1000).removeClass( 'fa-spin' );
startup();
});
我也试过以下方法,但当我这样做时图标开始旋转但不会停止:
$( '#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 刷新图标只旋转一两秒,然后停止?
在这种情况下您不能使用 delay
方法,因为 addClass 不会 return 队列接口来处理延迟。
所以你确实应该使用 setTimeout
但在里面使用正确的 this
值。问题是 setTimeout 将在全局对象 (this === window
) 上下文中执行回调函数。因此,您需要提供适当的上下文。为此,使用Function.prototype.bind方法很方便:
$( '#lock-refresh' ).click(function() {
$( this ).addClass( 'fa-spin' );
setTimeout(function() {
$( this ).removeClass( 'fa-spin' );
}.bind(this), 1000);
startup();
});
你应该做的:
$( '#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' 队列中执行:
$( '#lock-refresh' ).click(function() {
$(this).addClass("fa-spin").delay(1000).queue('fx', function() { $(this).removeClass('fa-spin'); });
startup();
// Whatever here.
});
做这样的事情(注意:使用 setTimeout 而不是 setInterval,我的错)
https://jsfiddle.net/c7276oww/
$( '#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();
});
我正在处理的网页上有很棒的字体刷新图标。
<i class="fa fa-refresh fa-3x" id="lock-refresh"></i>
单击此图标时,我希望它开始旋转。我已经能够通过在我的 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 文件中,但是当我这样做时图标根本不旋转:
$( '#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();
});
我也试过以下方法,但效果不佳:
$( '#lock-refresh' ).click(function() {
$( this ).addClass( 'fa-spin' ).delay(1000).removeClass( 'fa-spin' );
startup();
});
我也试过以下方法,但当我这样做时图标开始旋转但不会停止:
$( '#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 刷新图标只旋转一两秒,然后停止?
在这种情况下您不能使用 delay
方法,因为 addClass 不会 return 队列接口来处理延迟。
所以你确实应该使用 setTimeout
但在里面使用正确的 this
值。问题是 setTimeout 将在全局对象 (this === window
) 上下文中执行回调函数。因此,您需要提供适当的上下文。为此,使用Function.prototype.bind方法很方便:
$( '#lock-refresh' ).click(function() {
$( this ).addClass( 'fa-spin' );
setTimeout(function() {
$( this ).removeClass( 'fa-spin' );
}.bind(this), 1000);
startup();
});
你应该做的:
$( '#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' 队列中执行:
$( '#lock-refresh' ).click(function() {
$(this).addClass("fa-spin").delay(1000).queue('fx', function() { $(this).removeClass('fa-spin'); });
startup();
// Whatever here.
});
做这样的事情(注意:使用 setTimeout 而不是 setInterval,我的错) https://jsfiddle.net/c7276oww/
$( '#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();
});