Это вопрос о следующем вопросе Как увеличить указатель мыши при использовании моего собственного гладкого скругления колесика мыши?
Я использую css-преобразования, чтобы увеличить изображение до указателя мыши. Я также использую свой собственный алгоритм гладкой прокрутки для интерполяции и предоставления импульса колесику мыши.
С помощью Bali Balo в моем предыдущем вопросе мне удалось получить 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, перемещая изображение с использованием источника преобразования.
Хотя это отлично работает для положения неподвижной мыши, выбранного при полном уменьшении изображения; как указано выше, он ломается, когда курсор мыши перемещается после частичного увеличения.
Огромное спасибо заранее всем, кто может помочь.