Próbuję zaimplementować funkcjonalność przeciągania jak przy użyciu następnego wzoru:dotykowy Move zdarzenie nie ognia po tarczy dotykowy start jest usuwany
- Subskrybuj znaczników zdarzeń wskaźnik w dół.
- Po uruchomieniu zdarzenia Down należy subskrybować zdarzenia Window Move and Up i usunąć znaczniki.
- Wykonaj niektóre czynności podczas przenoszenia.
- Po uruchomieniu zdarzenia Up up anuluj subskrypcję Move and Up.
Działa w przypadku zdarzeń myszy, ale nie działa w przypadku zdarzeń dotykowych. Nie strzelają po usunięciu elementu Touch Start target. Próbowałem użyć Pointer Events Polyfill, ale to też nie działa.
Używam narzędzi Chrome Dev do emulacji wydarzeń dotykowych. Zobacz próbkę:
initTestBlock('mouse', {
start: 'mousedown',
move: 'mousemove',
end: 'mouseup'
});
initTestBlock('touch', {
start: 'touchstart',
move: 'touchmove',
end: 'touchend'
});
initTestBlock('touch-no-remove', {
start: 'touchstart',
move: 'touchmove',
end: 'touchend'
}, true);
function initTestBlock(id, events, noRemove) {
var block = document.getElementById(id);
var parent = block.querySelector('.parent');
var target = block.querySelector('.target');
target.addEventListener(events.start, function(e) {
console.log(e.type);
if (!noRemove) {
setTimeout(function() {
// Remove target
target.parentElement.removeChild(target);
}, 1000);
}
function onMove(e) {
console.log(e.type);
var pt = getCoords(e);
parent.style.left = pt.x + 'px';
parent.style.top = pt.y + 'px';
}
function onEnd(e) {
console.log(e.type);
window.removeEventListener(events.move, onMove);
window.removeEventListener(events.end, onEnd);
}
window.addEventListener(events.move, onMove);
window.addEventListener(events.end, onEnd);
});
}
// Returns pointer coordinates
function getCoords(e) {
if (e instanceof TouchEvent) {
return {
x: e.touches[0].pageX,
y: e.touches[0].pageY
};
}
return {
x: e.pageX,
y: e.pageY
};
}
window.addEventListener('selectstart', function() {
return false;
}, true);
.parent {
background: darkred;
color: white;
width: 10em;
height: 10em;
position: absolute;
}
.target {
background: orange;
width: 4em;
height: 4em;
}
#mouse .parent {
left: 0em;
}
#touch .parent {
left: 11em;
}
#touch-no-remove .parent {
left: 22em;
}
<div id="mouse">
<div class="parent">Mouse events
<div class="target">Drag here</div>
</div>
</div>
<div id="touch">
<div class="parent">Touch events
<div class="target">Drag here</div>
</div>
</div>
<div id="touch-no-remove">
<div class="parent">Touch (no remove)
<div class="target">Drag here</div>
</div>
</div>
Mam powiązany problem. Czy znalazłeś rozwiązanie w międzyczasie? –
@SebastianvomMeer Zobacz moją odpowiedź http://stackoverflow.com/a/34980275/4137472 –