我创建了一个代码,它作为“电影”工作,因为“薄膜”是一个包含所有 iphone 动作的长图像。为了营造电影般的运动感,此代码在backgroundPositionY上添加 500px,然后等待 30 ms并重新启动此过程。
机制很简单,但代码太长,尤其是当使用用于添加另一个功能的函数 .toggle() 时,它会在您再次单击时创建相反的动画。
/*animate*/
screen.toggle(function(e){
var mov = 0;
function cicloIphone(){
if(mov>6000){
mov=0;
};
iphone.css('backgroundPosition', '0 -'+mov+'px');
mov += 500;
if(mov<6000){
window.setTimeout(function(){
cicloIphone();
}, 30);
};
};
var timeoutIphone = window.setTimeout(function(){
cicloIphone();
},0);
},function(e){
var mov = 5500;
function cicloIphone(){
if(mov>6000){
mov=0;
};
iphone.css('backgroundPosition', '0 -'+mov+'px');
mov -= 500;
if(mov<6000){
window.setTimeout(function(){
cicloIphone();
}, 30);
};
};
var timeoutIphone = window.setTimeout(function(){
cicloIphone();
},0);
});
我想用函数 animate() 进行合成,但不想重新创建我的效果,因为不是每 30 毫秒从 500 像素跳到 1000 像素,而是太流畅并逐个像素地增加像素。
/*animate synthesized*/
screen.toggle(
function(e){iphone.stop(true,true).animate({
'backgroundPositionX':'0px',
'backgroundPositionY':'-5500px'
},3000)},function(e){iphone.stop(true,true).animate({
'backgroundPositionX':'0px',
'backgroundPositionY':'0px'
},3000);
});