Я пытаюсь масштабировать изображение и правильно его переводить из точки начала (в основном, для увеличения). Я пытаюсь найти решение, которое не связано с изменением transform-origin
, потому что это усложнит поиск левого/верхнего краев изображения, которое я использую не только для этой проблемы.
Это скорее математическая проблема. У меня возникли проблемы с приложением формулы для определения того, как много перевести изображение, основанное на происхождении. Текущее уравнение, которое я разработал, не правильно масштабируется от точки. Что касается демонстрации, изображение должно взорваться от указателя мыши при прокрутке с помощью мыши.
Я не ищу обходной путь или альтернативный дизайн. Как указывалось ранее, я не могу изменить свойство transform-origin.
Демо: https://jsfiddle.net/dook/ort0efjd/
Функция матричного преобразования
function transform() {
var matrix = [dim.new_scale, 0, 0, dim.new_scale, dim.new_x, dim.new_y].join(",");
image_center.css({
"transform": "matrix(" + matrix + ") translate3d(0, 0, 0)",
"-webkit-transform": "matrix(" + matrix + ") translate3d(0, 0, 0)",
"-moz-transform": "matrix(" + matrix + ") translate3d(0, 0, 0)",
});
}
Событие Mousewheel
// Determine mousewheel pointer in relation to picture origin
var offset = image_center.offset();
var originX = ev.originalEvent.pageX - offset.left;
var originY = ev.originalEvent.pageY - offset.top;
// truncated --- new_scale is modified
// Translate based on pointer origin -- This is where I need help
dim.new_x = originX + dim.height * (dim.new_scale - 1);
dim.new_y = originY + dim.height * (dim.new_scale - 1);
// truncated -- Keep image within constraints
transform(); // Applies everything in dim to CSS transform matrix