Это дополнительный вопрос к Как приблизить указатель мыши при использовании моей собственной плавной прокрутки колесика мыши?
Я использую преобразования css, чтобы приблизить изображение к указателю мыши. Я также использую свой собственный алгоритм плавной прокрутки для интерполяции и придания импульса колесу мыши.
С помощью Бали Бало в моем предыдущем вопросе мне удалось пройти 90% пути.
Теперь вы можете полностью приблизить изображение к указателю мыши, сохраняя плавную прокрутку, как показано на следующем примере JSFiddle:
Однако при перемещении указателя мыши функциональность нарушается.
Чтобы уточнить, если я увеличу масштаб на одну метку колеса мыши, изображение будет увеличено в правильном положении. Это поведение продолжается для каждой метки, которую я увеличиваю на колесе мыши, как и предполагалось. Однако, если после частичного увеличения я перемещаю мышь в другое положение, функциональность нарушается, и мне придется полностью уменьшить масштаб, чтобы изменить положение масштабирования.
Предполагаемое поведение заключается в том, чтобы любые изменения положения мыши во время процесса масштабирования правильно отражались в увеличенном изображении.
Две основные функции, управляющие текущим поведением, следующие:
self.container.on('mousewheel', function (e, delta) {
var offset = self.image.offset();
self.mouseLocation.x = (e.pageX - offset.left) / self.currentscale;
self.mouseLocation.y = (e.pageY - offset.top) / self.currentscale;
if (!self.running) {
self.running = true;
self.animateLoop();
}
self.delta = delta
self.smoothWheel(delta);
return false;
});
Эта функция собирает текущее положение мыши в текущем масштабе увеличенного изображения.
Затем он запускает мой алгоритм плавной прокрутки, который приводит к вызову следующей функции для каждой интерполяции:
zoom: function (scale) {
var self = this;
self.currentLocation.x += ((self.mouseLocation.x - self.currentLocation.x) / self.currentscale);
self.currentLocation.y += ((self.mouseLocation.y - self.currentLocation.y) / self.currentscale);
var compat = ['-moz-', '-webkit-', '-o-', '-ms-', ''];
var newCss = {};
for (var i = compat.length - 1; i; i--) {
newCss[compat[i] + 'transform'] = 'scale(' + scale + ')';
newCss[compat[i] + 'transform-origin'] = self.currentLocation.x + 'px ' + self.currentLocation.y + 'px';
}
self.image.css(newCss);
self.currentscale = scale;
},
Эта функция принимает значение масштаба (1-10) и применяет преобразования css, изменяя положение изображения с помощью transform-origin.
Хотя это отлично работает для неподвижного положения мыши, выбранного, когда изображение полностью уменьшено; как указано выше, он ломается, когда курсор мыши перемещается после частичного увеличения.
Заранее огромное спасибо всем, кто может помочь.