मेरा उपयोगकर्ता किसी ऑब्जेक्ट को कैनवास में माउस द्वारा स्थानांतरित करने (या घुमाने) करने में सक्षम होना चाहिए। जब माउस घटनाएं होती हैं तो स्क्रीन समन्वय का उपयोग अंतिम घटना में डेल्टा (दिशा और लंबाई) की गणना करने के लिए किया जाता है। कुछ भी नहीं विशेष ...कोणीय 2: माउस इवेंट हैंडलिंग (वर्तमान स्थिति से संबंधित आंदोलन)
- mousedown (प्रथम समन्वय मिलता है)
- MouseMove (n वें समन्वय हो, deltaXY गणना, deltaXY द्वारा वस्तु को स्थानांतरित)
- mouseup (चरण 2 के रूप में ही है और MouseMove और mouseup रोक घटना हैंडलिंग)
घटनाओं की इस श्रृंखला के बाद एक ही कार्रवाई को दोहराना संभव होना चाहिए।
यह पुराना उदाहरण toRx
कॉल को हटाने के बाद अपेक्षित कार्य करता है। लेकिन यहाँ पहली समन्वय करने के लिए डेल्टा निर्धारित होता है:
@Component({
selector: 'home',
providers: [Scene],
template: '<canvas #canvas id="3dview"></canvas>'
})
export class Home {
@ViewChild('canvas') canvas: ElementRef;
private scene: Scene;
private mousedrag = new EventEmitter();
private mouseup = new EventEmitter<MouseEvent>();
private mousedown = new EventEmitter<MouseEvent>();
private mousemove = new EventEmitter<MouseEvent>();
private last: MouseEvent;
private el: HTMLElement;
@HostListener('mouseup', ['$event'])
onMouseup(event: MouseEvent) { this.mouseup.emit(event); }
@HostListener('mousemove', ['$event'])
onMousemove(event: MouseEvent) { this.mousemove.emit(event); }
constructor(@Inject(ElementRef) elementRef: ElementRef, scene: Scene) {
this.el = elementRef.nativeElement;
this.scene = scene;
}
@HostListener('mousedown', ['$event'])
mouseHandling(event) {
event.preventDefault();
console.log('mousedown', event);
this.last = event;
this.mousemove.subscribe({next: evt => {
console.log('mousemove.subscribe', evt);
this.mousedrag.emit(evt);
}});
this.mouseup.subscribe({next: evt => {
console.log('mousemove.subscribe', evt);
this.mousedrag.emit(evt);
this.mousemove.unsubscribe();
this.mouseup.unsubscribe();
}});
}
ngOnInit() {
console.log('init');
this.mousedrag.subscribe({
next: evt => {
console.log('mousedrag.subscribe', evt);
this.scene.rotate(
evt.clientX - this.last.clientX,
evt.clientY - this.last.clientY);
this.last = evt;
}
});
}
...
}
यह केवल एक चक्र के लिए काम करता है: github.com:rx-draggable
यहाँ उदाहरण से कोड अनुकूल करने के लिए मेरे प्रयास है।
Uncaught EXCEPTION: Error during evaluation of "mousemove"
ORIGINAL EXCEPTION: ObjectUnsubscribedError
ERROR CONTEXT: EventEvaluationErrorContext
mousemove
सदस्यता को रद्द करने से काम नहीं करता: mouseup
घटना के बाद मैं यह त्रुटि हुई। त्रुटि निम्नलिखित सभी mousemoves के लिए दोहराना है।
क्या आपको पता है कि मेरे कोड में क्या गलत है? क्या इस समस्या को हल करने के लिए एक अलग सुरुचिपूर्ण दृष्टिकोण है?
धन्यवाद अच्छा काम करता है:
यहाँ एक उदाहरण है। –
आपका पुराना कोड, जो 'निकालने' का उपयोग करता है, काम नहीं करता है, आपको कोई विचार है क्यों? क्या आप एंगुलर 2 के साथ प्रतिक्रियाशील सामान सीखने के लिए एक अच्छा संसाधन जानते हैं? –
@ मीको एमएम, मैंने 'निकालने' का परीक्षण नहीं किया, लेकिन मैंने इसे इस तरह से पहले इस्तेमाल किया और यह काम किया। मेरे पास कोई अच्छा संसाधन नहीं है, और मैं खेलते समय सीख रहा हूं :)। स्वीकार करने के लिए धन्यवाद। खुशी है कि मैं – PierreDuc