2017-08-04 7 views
11

Mam duży rozmiar div. Podczas próby zmiany rozmiaru cała strona jest zaznaczana kolorem niebieskim, mimo że nie zamierzałem tego robić w iE i Edge. Próbowałem wielu rozwiązań wyświetlanych w Internecie, ale nic nie działało. Poniżej znajduje się mój kod. Nie jestem w stanie zapobiec domyślnemu działaniu zdarzenia po ruchu myszki. Słucham zdarzenia ownerDocument for mouse move.evt.preventDefault nie działa w IE i Edge na zdarzeniu przenoszenia myszy, nawet próbował evt.returnValue = false; ale nie działa, aby zatrzymać propagację.

poniższy kod działa zgodnie z oczekiwaniami w Chrome i Mozilla

Widziałem w konsoli poprzez kontrolę w zmiennej EVT, zanim propagacja przystanek zapobiec domyślnie jest to prawdą, po propagacji przystanek zapobiec domyślną jest false. Tak samo jak google chromes zachowanie, lecz nadal nie dostać dlaczego jest cała strona uzyskiwanie wybrany

React Kod:

<div className="resizer" 
     tabIndex={-1} 
     onMouseDown={this.MouseDown} 
/> 


private MouseDown(evt: any) { 
     this.viewState.resizing = true; 
     const {ownerDocument} = ReactDOM.findDOMNode(this); 
     ownerDocument.addEventListener('mousemove', this.MouseMove); 
     ownerDocument.addEventListener('mouseup', this.MouseUp); 

     this.setState(this.viewState); 
    } 

private MouseMove(evt) { 
     this.viewState.width = width; 
     this.viewState.height = height; 


     if (evt.preventDefault) { 
      evt.returnValue = false; 
      evt.preventDefault(); 
     } 
     else { 
      evt.cancelBubble = true; 
     } 


     this.setState(this.viewState); 
    } 

Odpowiedz

5

Zamiast evt.preventDefault(); w ruch myszy, aby go w mousedown/Click zdarzenia sama

private MouseDown(evt: any) { 
     this.viewState.resizing = true; 
     const {ownerDocument} = ReactDOM.findDOMNode(this); 
     evt.preventDefault(); 
     evt.stopPropagation(); 
     ownerDocument.addEventListener('mousemove', this.MouseMove); 
     ownerDocument.addEventListener('mouseup', this.MouseUp); 

     this.setState(this.viewState); 
    } 
1

Spróbuj tego wzoru:

if (event.preventDefault){ 
    event.preventDefault(); 
} 
else { 
    event.returnValue = false; 
} 
+0

nie działał Dodałem także powrót do funkcji fałszywego ruchu myszy – Labeo

2

Jeśli problem jest to, że strona zostanie wybrany z niebieski kolor, istnieje inne podejście, aby zapobiec selekcji.

Spróbuj tego:

<body onselectstart="return false"> 
+0

Ale cant całkowicie usunąć tę funkcjonalność. Tutaj chcemy tylko zapobiec tej funkcji tylko wtedy, gdy zmieniamy rozmiar elementu div. – Labeo

+0

Czy próbowałeś tego podejścia przy użyciu 'addEventListener' i' removeEventListener' ?. Zgaduję, że masz zdarzenia 'onDragStart' lub' onMouseDown' oraz inne zdarzenia, kiedy interakcja kończy się jak 'onDragEnd' lub' onMouseUp'. Inną alternatywą, którą możesz wypróbować, jest narzędzie przeciągania GreenSock https://greensock.com/draggable – Rodrigo