2012-12-27 5 views
4

J'essaye d'animer un arrière-plan sur mousemove avec un peu d'accélération en utilisant jquery animate. Mais ne peux pas comprendre comment arrêter la mise en attente de l'animation et ont l'animation "suivre" la souris autourJquery - Animer Position d'arrière-plan avec accélération

HTML:

Animate Background<br /> 
<div id="animateme"></div>​ 

JS:

$("#animateme").bind('mousemove', function(e) { 

    $(this).animate({ 
     'background-position-x': e.pageX, 
     'background-position-y': e.pageY 
    }, 100, 'swing'); 

});​ 

J'ai mis en place un jsFiddle pour montrer ce que je veux dire, je l'espère http://jsfiddle.net/KunZ4/1/

Passez la souris sur l'image du haut et vous verrez l'animation en arrière-plan suivre la souris. Mais je veux ajouter un peu d'assouplissement à cela, donc il suit la souris un peu plus lisse. L'utilisation de l'animation jquery semble faire la queue, mais je veux que l'animation rattrape un peu la souris lorsque le mouvement de la souris est arrêté. Je souhaite atteindre cet objectif sans utiliser d'interface utilisateur ou de plugins.

Espérons que fait une sorte de sens

+0

Le haut est _pretty_ lisse à moi ... – Neal

+0

Oui - mais je veux l'arrière-plan de "rattraper" le mousemovement Donc il y a un retarder le déménagement. – eleven11

+0

http://www.chromazone-imaging.co.uk/flashindex.html Si vous regardez ce site Web - Même type d'effet, mais pas jquery – eleven11

Répondre

4

J'ai trouvé quelque chose qui a fonctionné pour moi, pour tous ceux qui cherchent d'autre pour cette

http://jsfiddle.net/KunZ4/6/

L'assouplissement peut être ajustée en changeant la durée

$.easing.smoothmove = function (x, t, b, c, d) { 
return -c *(t/=d)*(t-2) + b; 
}; 


$("#animateme").bind('mousemove', function(e){ 

$(this).animate({ 
    'background-position-x': e.pageX, 
    'background-position-y': e.pageY 
}, {queue:false,duration:200,easing:'smoothmove'}); 

});  

Merci pour toute l'aide

+0

Existe-t-il un moyen de rendre l'arrière-plan à sa position d'origine après que la souris ait arrêté de planer le div? –

0

Essayez d'ajouter stop(true) avant que la fonction .animate:

$("#animateme").bind('mousemove', function(e) { 

    $(this).stop(true).animate({ 
     'background-position-x': e.pageX, 
     'background-position-y': e.pageY 
    }, 100, 'swing'); 

});​ 

Fiddle: http://jsfiddle.net/maniator/KunZ4/4/

+0

Oui - J'ai essayé que , mais cela ne donne pas vraiment un effet lisse lorsque vous déplacez la souris rapidement. Appréciez l'aide si – eleven11

0

DÉVELOPPÉ, (lorsque la souris se déplaçant dans le corps): http://jsfiddle.net/hX22a/

$.easing.smoothmove = function (x, t, b, c, d) { 
return -c *(t/=d)*(t-2) + b; 
}; $("body").bind('mousemove', function(e){ 
$("#animateme").animate({ 
'background-position-x': e.pageX, 
'background-position-y': e.pageY 
}, {queue:false,duration:200,easing:'smoothmove'}); 
});