Ник Крейвер опередил меня до ответа примерно на 10 минут, но это мой код для этого, используя background-image
для позиционирования изображения вместо реального изображения.
var img = $('#outer'),
imgWidth = 1600,
imgHeight = 1200,
eleWidth = img.width(),
eleHeight = img.height(),
offsetX = img.offset().left,
offsetY = img.offset().top,
moveRatioX = imgWidth / eleWidth - 1,
moveRatioY = imgHeight / eleHeight - 1;
img.mousemove(function(e){
var x = imgWidth - ((e.pageX - offsetX) * moveRatioX),
y = imgHeight - ((e.pageY - offsetY) * moveRatioY);
this.style.backgroundPosition = x + 'px ' + y + 'px';
});
Существует огромное количество переменных , потому что обработчик событий mousemove
должен быть максимально эффективным.Это немного более ограничительно, потому что вам нужно знать размеры, но я думаю, что код можно легко изменить, чтобы он работал с img
s, для которых размер можно легко вычислить.
Простая демонстрация этого: http://www.jsfiddle.net/yijiang/fq2te/1/