Nella sezione direttive del angular docsTesting mousedown angolare, MouseMove, mouseup
Essi forniscono all'incirca questo esempio di come fare una cosa di trascinamento.
La mia domanda è come si dovrebbe verificare il loro esempio/implementazione:
var startX = 0, startY = 0;
scope.x = 0;
scope.y = 0;
element.css({
top: scope.y,
left: scope.x
});
element.on('mousedown', function(event) {
// Prevent default dragging of selected content
event.preventDefault();
startX = event.pageX - scope.x;
startY = event.pageY - scope.y;
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
});
function mousemove(event) {
scope.y = event.pageY - startY;
scope.x = event.pageX - startX;
element.css({
top: scope.y + 'px',
left: scope.x + 'px'
});
}
function mouseup() {
$document.off('mousemove', mousemove);
$document.off('mouseup', mouseup);
}
}
ma che funziona solo per un singolo evento.
L'esempio di Angular utilizza il mouse per aggiungere gli ascoltatori di eventi mousemove e mouseup e this stackoverflow answer utilizza triggerHandler-- che impedisce bubbling/propagation.
In questo momento ho (più o meno):
describe('on mousedown it', function(){
it('moves a thing', function(){
expect(scope.x).toBe(0);
element.triggerHandler({type: 'mousedown', pageX: 0, pageY:0});
element.triggerHandler({type: 'mousemove', pageX:10, pageY:10);
expect(scope.x).toBe(10);
});
});
prova sta venendo a mancare. scope.x sta registrando come 0. cosa fare?
FWIW innescare il gestore on non funziona $ documento sia –