Разве это не должно
var y=Math.round(ypos/vW*100);
var x=Math.round(xpos/vH*100);
будь таким
var y=Math.round(ypos/vH*100);
var x=Math.round(xpos/vW*100);
поскольку x - это горизонтальная (=> ширина), а y - вертикальная (=> высота) ось?
Я почти уверен, что как только вы измените это, он будет работать, как и ожидалось.
EDIT:
Вы также должны убедиться, что для vH
, vW
, vT
и vL
установлены соответствующие атрибуты элемента current , т.е.
//Gradient Effect
jQuery('.categoryWrapper').mousemove(function(e){
var vH=jQuery(this).height();
var vW=jQuery(this).width();
var vT=jQuery(this).offset().top;
var vL=jQuery(this).offset().left;
var ypos=e.pageY-vT;
var xpos=e.pageX-vL;
var y=Math.round(ypos/vH*100);
//var x=Math.round(xpos/vW*100);
var x=Math.round((xpos/vW*100 - 50)*15);
jQuery(this).css({backgroundPosition: x+'% '+y+'%'});
jQuery('#x').text(x);
jQuery('#y').text(y);
Устанавливая их вне обработчика mousemove
, они принимают значения на основе всей коллекции, возвращаемой селектором «.categoryWrapper», а не только элемента под мышью в момент mousemove