Замените используемое процентное значение на .animate
абсолютным значением.Вы можете вычислить его аналогично тому, как вы делаете со значением vleft
, например:
var topDelta = ($(window).height() - this.outerHeight()) / 2;
Затем используйте его вместо 50%
:
this.animate({ opacity:0.8, top: '+=' + topDelta }, ...