All,
I am trying create a 'to & fro' animation using jquery animate & css transform property.
I referred to this SO post on using step function in animate, however, Im not having much success. Please review & advice.
Jsfiddle demo
HTML:
<ul id="a">
<li class="cAccessories" id="AccButtons"><span>blah blah..</span></li>
<li class="cAccessories" id="AccRibbons"><span>blah blah..</span></li>
<li class="cAccessories" id="AccLaces"><span>blah blah..</span></li>
<li class="cAccessories" id="AccEmbroider"><span>blah blah..</span></li>
</ul>
CSS:
#a {
position: absolute;
top: 25px;
left: 25px;
width: 150px;
height: 150px;
padding: 0;
margin: 0;
list-style: none;
background-color: blue;
}
JAVASCRIPT:
$("#a").animate ({"margin-left": "+=10px"}, {step: function (now, fx) {
$("#a").css ("-moz-transform", "rotate('5deg')");
$("#a").css ("-webkit-transform", "rotate ('5deg')");
$("#a").css ("-ms-transform", "rotate ('5deg')");
$("#a").css ("-o-transform", "rotate ('5deg')");
}, duration: "slow"}, "linear", function ()
{
$("#a").animate ({left: "+=0px"}, {step: function (now, fx) {
$("#a").css ("-webkit-transform", "rotate ('-5deg')");
$("#a").css ("-moz-transform", "rotate ('-5deg')");
$("#a").css ("-ms-transform", "rotate ('-5deg')");
$("#a").css ("-o-transform", "rotate ('-5deg')");
}, duration: "slow"}, "linear" ); });
Following is the original code, which I doesn't like the transform animation (even though it animates the 'top' value perfectly).
iTemplateNo = $(this).attr("id").substr (-1, 1);
eCurHanger = document.getElementById("hanger0" + iTemplateNo);
$(eCurHanger).attr("src", "Img/V2/Hanger.png");
$(eCurHanger).css ({"width": "45px", "height": "35px"});
$(eCurHanger).animate ({top: "+=10px"}, {step: function (angle, fx) {
$(eCurHanger).css ({"-webkit-transform": "rotate ("+angle+"deg)",
"-moz-transform": "rotate ("+angle+"deg)",
"-ms-transform": "rotate ("+angle+"deg)",
"-o-transform": "rotate ("+angle+"deg)"});
}, duration: 1000}, "linear", function ()
{
$(eCurHanger).animate ({left: "+=10px"}, {step: function (angle, fx) {
$(this).css ({"-webkit-transform": "rotate("+angle+"deg)",
"-moz-transform": "rotate("+angle+"deg)",
"-ms-transform": "rotate("+angle+"deg)",
"-o-transform": "rotate("+angle+"deg)"})
}, duration: 1000}, "linear" ) });
All,
I am trying create a 'to & fro' animation using jquery animate & css transform property.
I referred to this SO post on using step function in animate, however, Im not having much success. Please review & advice.
Jsfiddle demo
HTML:
<ul id="a">
<li class="cAccessories" id="AccButtons"><span>blah blah..</span></li>
<li class="cAccessories" id="AccRibbons"><span>blah blah..</span></li>
<li class="cAccessories" id="AccLaces"><span>blah blah..</span></li>
<li class="cAccessories" id="AccEmbroider"><span>blah blah..</span></li>
</ul>
CSS:
#a {
position: absolute;
top: 25px;
left: 25px;
width: 150px;
height: 150px;
padding: 0;
margin: 0;
list-style: none;
background-color: blue;
}
JAVASCRIPT:
$("#a").animate ({"margin-left": "+=10px"}, {step: function (now, fx) {
$("#a").css ("-moz-transform", "rotate('5deg')");
$("#a").css ("-webkit-transform", "rotate ('5deg')");
$("#a").css ("-ms-transform", "rotate ('5deg')");
$("#a").css ("-o-transform", "rotate ('5deg')");
}, duration: "slow"}, "linear", function ()
{
$("#a").animate ({left: "+=0px"}, {step: function (now, fx) {
$("#a").css ("-webkit-transform", "rotate ('-5deg')");
$("#a").css ("-moz-transform", "rotate ('-5deg')");
$("#a").css ("-ms-transform", "rotate ('-5deg')");
$("#a").css ("-o-transform", "rotate ('-5deg')");
}, duration: "slow"}, "linear" ); });
Following is the original code, which I doesn't like the transform animation (even though it animates the 'top' value perfectly).
iTemplateNo = $(this).attr("id").substr (-1, 1);
eCurHanger = document.getElementById("hanger0" + iTemplateNo);
$(eCurHanger).attr("src", "Img/V2/Hanger.png");
$(eCurHanger).css ({"width": "45px", "height": "35px"});
$(eCurHanger).animate ({top: "+=10px"}, {step: function (angle, fx) {
$(eCurHanger).css ({"-webkit-transform": "rotate ("+angle+"deg)",
"-moz-transform": "rotate ("+angle+"deg)",
"-ms-transform": "rotate ("+angle+"deg)",
"-o-transform": "rotate ("+angle+"deg)"});
}, duration: 1000}, "linear", function ()
{
$(eCurHanger).animate ({left: "+=10px"}, {step: function (angle, fx) {
$(this).css ({"-webkit-transform": "rotate("+angle+"deg)",
"-moz-transform": "rotate("+angle+"deg)",
"-ms-transform": "rotate("+angle+"deg)",
"-o-transform": "rotate("+angle+"deg)"})
}, duration: 1000}, "linear" ) });
Share Improve this question edited May 23, 2017 at 9:59 CommunityBot 11 silver badge asked Feb 16, 2012 at 7:09 KayoteKayote 15.7k26 gold badges96 silver badges152 bronze badges 6
- My apologies, I had changed the code & had forgotten to take this bit out. – Kayote Commented Feb 16, 2012 at 8:11
- note transform from jQuery cssHooks – noob Commented Feb 16, 2012 at 11:55
- @micha, would you please elaborate. I have figured out what the problem is (which is that there shouldn't be any spacing between 'rotate' & brackets). HOwever, I cant seem to attach callback function at the end. – Kayote Commented Feb 16, 2012 at 11:58
-
1
cssHooks transform.
{step: function(){}, plete:function(){alert("success!")}}
– noob Commented Feb 16, 2012 at 15:02 - @micha, thank you. I donot want to go down the plugin route if I can help it. However, what you have suggested next is exactly what I need if I can figure it out. I need to use the plete parameter to run a function at interval. Would you please post this as your answer so I can upvote. – Kayote Commented Feb 17, 2012 at 1:53
2 Answers
Reset to default 2I do not know what eCurHanger
is, but look here http://jsfiddle/8tP9D/
var angle = 0;
$("#a").animate ({"margin-left": "+=200px"}, {step: function (now, fx) {
angle += 1;
$(this).css ({"-moz-transform":"rotate("+angle+"deg)",
"-webkit-transform":"rotate("+angle+"deg)",
"-ms-transform":"rotate("+angle+"deg)",
"-o-transform":"rotate("+angle+"deg)"});
}, duration: 5000}, "linear");
instead of global angle
you could use now
variable. http://jsfiddle/39pe6/
$("#a").animate ({"margin-left": "+=200px"}, {step: function (angle, fx) {
$(this).css ({"-moz-transform":"rotate("+angle+"deg)",
"-webkit-transform":"rotate("+angle+"deg)",
"-ms-transform":"rotate("+angle+"deg)",
"-o-transform":"rotate("+angle+"deg)"});
}, duration: 5000}, "linear");
Researched a bit. There were certain syntax errors. Here is the output you require I think Click Here!.
The code working with me is here:
$("#a").animate({ textIndent: 5 }, {
step: function(now,fx)
{
$(this).css({
'-webkit-transform':'rotate('+now+'deg)',
'transform':'rotate('+now+'deg)',
'-ms-transform':'rotate('+now+'deg)'});
},duration:1000,
plete:function() {
$("#a").animate({ textIndent: -5 }, {
step: function(now,fx)
{
$(this).css({
'-webkit-transform':'rotate('+now+'deg)',
'transform':'rotate('+now+'deg)',
'-ms-transform':'rotate('+now+'deg)'});
},duration:1000
});
}});
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745588350a4634681.html
评论列表(0条)