Muchas gracias
@ZK, conseguí solucionarlo como dijiste:
Código Javascript
:
Ver original// ...
mover : function(desde, cuanto, tiempo){
var obj = { 'right' : 'left', 'bottom' : 'top' }, str = desde in obj ? obj[desde] : desde, multip = str == desde ? 1 : -1;
var resta = { 'left' : 'width', 'top' : 'height' }[str], tam = P(this)['offset' + resta.capitalize()];
var n = cuanto - tam;
var estilo = P(this).css('position', 'absolute').css(resta, tam).posicion(str);
if(!tiempo){
return P(this).css(str, parseFloat(estilo + cuanto * multip) + 'px');
}else{
var incr = cuanto / (tiempo / 20), obj = P(this), timer = setInterval(function(){
if(obj.posicion(str) >= estilo + cuanto){
timer = clearInterval(timer);
return obj;
}else{
obj.css(str, parseFloat(obj.posicion(str) + incr * multip) + 'px');
}
}, 20);
}
},
// ...
Sin embargo ahora se me plantea otra duda. ¿Cómo puedo hacer que al moverlo, rebote y vuelve hacia atrás? Algo como
esto (al pasar por encima de los items del menú). He probado así pero ni se acerca XD
Código Javascript
:
Ver original// ...
rebote : function(desde, cuanto, tiempo){
var este = P(this), inverso = {'left' : 'right', 'top' : 'bottom' };
var obj = { 'right' : 'left', 'bottom' : 'top' }, str = desde in obj ? obj[desde] : desde;
var resta = { 'left' : 'width', 'top' : 'height' }[str], tam = P(this)['offset' + resta.capitalize()];
var estilo = este.css('position', 'absolute').css(resta, tam).posicion(str);
var incr = (cuanto * 1.1 / (tiempo * 11/12)) * 20, timer = setInterval(function(){
if(este.posicion(str) >= estilo + cuanto * 1.1){ timer = clearInterval(timer); return este; }
else{
este.css(str, parseFloat(este.posicion(str) + incr) + 'px');
}
}, 20);
incr = (cuanto * -0.1 / (tiempo * 1/12)) * 20, timer = setInterval(function(){
if(este.posicion(inverso[desde] || obj[desde]) <= estilo + cuanto){ timer = clearInterval(timer); return este; }
else{
este.css(str, parseFloat(este.posicion(str) + incr) + 'px');
}
}, 20);
},
// ...
Saludos!