2017-08-04 80 views
11

我有一個可調整的div。在嘗試調整大小時,即使我不打算在iE和Edge中,整個頁面也會以藍色進行選擇。我已經嘗試了很多在網上顯示的解決方案,但沒有任何工作以下是我的代碼。我無法通過鼠標移動來防止事件的默認操作。我正在收聽ownerDocument鼠標移動事件。evt.preventDefault無法在IE和Edge上使用鼠標移動事件,甚至試過evt.returnValue = false;但沒有阻止傳播

下面的代碼正在按預期在瀏覽器和Mozilla

我已經在EVT變量檢查可見在控制檯前,停止傳播防止默認爲真,停止傳播之後防止默認爲false。同谷歌鉻合金的行爲,但仍然沒有得到爲什麼整個頁面越來越選定

陣營代碼:

<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); 
    } 

回答

5

而不是使evt.preventDefault的();在鼠標移動,使其在鼠標按下/ Click事件本身

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

嘗試這種模式:

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

沒有工作我也加入了返回false將鼠標移動功能 – Labeo

2

如果問題是,網頁獲取與選擇藍色,還有另一種防止選擇的方法。

試試這個:

<body onselectstart="return false"> 
+0

但是我們不能完全刪除該功能。這裏我們只想在我們調整div元素的大小時阻止該功能。 – Labeo

+0

你有沒有試過這種方法使用'addEventListener'和'removeEventListener' ?.我猜測你有一個'onDragStart'或'onMouseDown'事件和其他事件,當交互結束時像'onDragEnd'或'onMouseUp'。你可以嘗試的另一種選擇是GreenSock的Draggable工具https://greensock.com/draggable – Rodrigo