问题
I have an icon, which is rotated on click.
I'd like to "reset" it (without a page refresh), so it would rotate on every click.
$('#icon').click(function(){
$(this).css('transform','rotate(360deg)');
});
Here is the example: http://jsfiddle.net/tDvD9/1/
Thanks!
回答1:
Here's one simple way:
var r = 0;
$('#icon').click(function(){
$(this).css('transform','rotate(' + (r += 360) + 'deg)');
});
That way your "transform" property will change on each click (until somebody clicks 100 million times or so).
回答2:
This is not a very elegant solution (I think the worst part is that you have to know the transition time in the JS) but you can reset it with setTimeout. The inner setTimeout is necessary or else it will take 3 seconds to rotate back to 0.
$(this).css('transform','rotate(360deg)');
setTimeout(function () {
this.css({'transform': 'rotate(0deg)', 'transition': '0'});
setTimeout(function () {
this.css('transition', 'all 3s ease-in-out');
}.bind(this), 10);
}.bind($(this)), 3000);
The inner setTimeout is done to
http://jsfiddle.net/ExplosionPIlls/tDvD9/2/
回答3:
I reset it by rotate it back
var last=0; // rotated degree last time set to 0
var x=360; //degree to rotate
var t=9000; // time duration
$("#item").click(function(){ //click
rotateme(x);// call function
});
function rotateme(x){
if(last!=0){// if last has value
// rotate it back
$("#id").animate({ borderSpacing: -last }, {
duration:0
});
}
// rotate setting x,y position
$("#id").css("transform-origin",0% 0%);
$("#id").css("-ms-transform-origin",0% 0%);
$("#id").css("-webkit-transform-origin",0% 0%);
$("#id").css("-moz-transform-origin",0% 0%);
// rotate steps
$("#id").animate({ borderSpacing: x }, {
step: function(now,fx) {
$(this).css('-webkit-transform','rotate('+now+'deg)');
$(this).css('-moz-transform','rotate('+now+'deg)');
$(this).css('transform','rotate('+now+'deg)');
},
duration:t
});
last=x;
}
来源:https://stackoverflow.com/questions/17503359/jquery-how-to-reset-a-css-rotated-icon