Я пытаюсь реализовать функцию поворота и масштабирования с помощью ползунка. Мне нужно, чтобы изображение всегда вращалось из центра области просмотра. Основная идея - изменить положение и смещение сцены после события перетаскивания. Вот что я пробовал
const width = window.innerWidth
const height = window.innerHeight
// scale is temp
let stage = new Konva.Stage({
container: 'canvas',
width,
height,
draggable: true,
offset: {
x: width / 2,
y: height / 2
},
x: width / 2,
y: height / 2
})
let mapLayer = new Konva.Layer()
let imageObj = new Image()
imageObj.onload = function () {
let map = new Konva.Image({
image: imageObj,
prevX: 0,
prevY: 0
})
layer.add(map)
stage.add(mapLayer)
stage.on('dragstart', () => {
map.prevX = map.getAbsolutePosition().x
map.prevY = map.getAbsolutePosition().y
})
stage.on('dragend', () => {
let curX = map.getAbsolutePosition().x
let curY = map.getAbsolutePosition().y
let deltaX = Math.abs(map.prevX - curX)
let deltaY = Math.abs(map.prevY - curY)
if (curX > map.prevX) {
stage.offsetX(stage.offsetX() - deltaX)
stage.x(stage.x() - deltaX)
} else {
stage.offsetX(stage.offsetX() + deltaX)
stage.x(stage.x() + deltaX)
}
if (curY > map.prevY) {
stage.offsetY(stage.offsetY() - deltaY)
stage.y(stage.y() - deltaY)
} else {
stage.offsetY(stage.offsetY() + deltaY)
stage.y(stage.y() + deltaY)
}
stage.draw()
})
}
(если вам нужен полный исходный код, клонируйте его отсюда и запустите yarn run dev
из терминала, приложение работает на localhost:3000
Он отлично работает, когда изображение находится в нормальном положении (еще не увеличено и не повернуто), но после ЛЮБОГО поворота или масштабирования перетаскивание сцены приведет к изменению положения сцены странным образом (смещение все еще правильное, хотя ). Как правильно установить положение и смещение?
draggable
без каких-либо вычислений). Таким образом, в любом состоянии перетаскивания смещение родителя будет таким же в том же месте, но будет отображаться другая часть вложенного изображения. - person extempl   schedule 23.03.2019