В моем ионном проекте я помещал некоторые значки, накладывающиеся на изображение внутри директивы ионного прокрутки. Использование координат x, y и положение значков в абсолютном (относительно ионного прокрутки). Размещение значков отлично работает.Ионный, перетаскиваемый элемент внутри ионного свитка
Теперь я хотел бы иметь возможность перетаскивать эти значки внутри ионного свитка.
Я использую on-touch и on-release, чтобы заморозить прокрутку и перетащить, чтобы получить событие перетаскивания.
Теперь проблема заключается в том, что событие $ из метода on-drag дает мне координаты x/y относительно окна/документа.
Я не могу показаться, чтобы выяснить способ получить правильный х, у координаты относительно родителя (ионно-свитка):
HTML, выглядит следующим образом:
<ion-scroll zooming="true" direction="xy">
<img >
<my-icon
on-touch="vm.stopIonicScroll()"
on-release="vm.startIonicScroll()"
on-drag="vm.dragging($event, vm.start)">
</my-icont>
</ion-scroll>
И мой контроллер
vm.stopIonicScroll = function() {
$ionicScrollDelegate.$getByHandle('plan').getScrollView().options.scrollingY = false;
$ionicScrollDelegate.$getByHandle('plan').getScrollView().options.scrollingX = false;
};
vm.startIonicScroll = function() {
$ionicScrollDelegate.$getByHandle('plan').getScrollView().options.scrollingY = true;
$ionicScrollDelegate.$getByHandle('plan').getScrollView().options.scrollingX = true;
};
vm.dragging = function($event, element) {
console.log($event);
};
После того, как я начала перетаскивания элемента я получить вызов: Событие об ошибке
, например. такого и $ события:
{
"gesture": {
"center": {
"pageX": 609,
"pageY": 363
},
"timeStamp": 1438260728495,
"target": {
},
"touches": {
"0": {
"target": {
},
"identifier": 3284571703,
"clientX": 609,
"clientY": 363,
"pageX": 609,
"pageY": 363,
"screenX": 609,
"screenY": 363
},
"length": 1
},
"eventType": "move",
"pointerType": "touch",
"srcEvent": {
"touches": {
"0": {
"target": {
},
"identifier": 3284571703,
"clientX": 609,
"clientY": 363,
"pageX": 609,
"pageY": 363,
"screenX": 609,
"screenY": 363
},
"length": 1
},
"targetTouches": {
"0": {
"target": {
},
"identifier": 3284571703,
"clientX": 609,
"clientY": 363,
"pageX": 609,
"pageY": 363,
"screenX": 609,
"screenY": 363
},
"length": 1
},
"changedTouches": {
"0": {
"target": {
},
"identifier": 3284571703,
"clientX": 609,
"clientY": 363,
"pageX": 609,
"pageY": 363,
"screenX": 609,
"screenY": 363
},
"length": 1
},
"scale": 1,
"rotation": 0,
"ctrlKey": false,
"shiftKey": false,
"altKey": false,
"metaKey": false
},
"deltaTime": 19992,
"deltaX": 252.05572809,
"deltaY": 139.527864045,
"velocityX": 0.012607829536315,
"velocityY": 0.0069791848762005,
"distance": 288.09740524333,
"angle": 28.967141193712,
"direction": "right",
"scale": 1,
"rotation": 0,
"startEvent": {
"center": {
"pageX": 356.94427191,
"pageY": 223.472135955
},
"timeStamp": 1438260708503,
"target": {
},
"touches": [
{
"target": {
},
"identifier": 3284571702,
"clientX": 348,
"clientY": 219,
"pageX": 348,
"pageY": 219,
"screenX": 348,
"screenY": 219
}
],
"eventType": "start",
"pointerType": "touch",
"srcEvent": {
"touches": {
"0": {
"target": {
},
"identifier": 3284571702,
"clientX": 1022,
"clientY": 710,
"pageX": 1022,
"pageY": 710,
"screenX": 1022,
"screenY": 710
},
"length": 1
},
"targetTouches": {
"0": {
"target": {
},
"identifier": 3284571702,
"clientX": 1022,
"clientY": 710,
"pageX": 1022,
"pageY": 710,
"screenX": 1022,
"screenY": 710
},
"length": 1
},
"changedTouches": {
"0": {
"target": {
},
"identifier": 3284571702,
"clientX": 1022,
"clientY": 710,
"pageX": 1022,
"pageY": 710,
"screenX": 1022,
"screenY": 710
},
"length": 1
},
"scale": 1,
"rotation": 0,
"ctrlKey": false,
"shiftKey": false,
"altKey": false,
"metaKey": false,
"isTapHandled": true
}
}
}
}
Теперь каждый х/у я в этом случае является относительно окна/документа.
С помощью ng-click вы можете получить offsetX/offsetY
(относительно родителя).
Как мне это сделать с помощью on-drag
?
Прошло некоторое время с тех пор, как я написал этот код, но я верю, что у freezeScroll были некоторые ошибки. Это действительно более чистый способ. – RVandersteen
Если я перетаскиваю слишком быстро, мой элемент перетаскивается, потому что он больше не получает событие перетаскивания. Вы знаете какое-либо решение для этого? –
Я этого не делаю, прошло уже больше года с тех пор, как я работал с ионикой. Может быть, ваш элемент слишком мал? – RVandersteen