2013-06-28 79 views
4

我在div上有一個textarea。在div中,我突出顯示輸入到textarea文本的某些部分。我試圖讓鼠標懸停在亮點上,但顯然我不能,因爲它們在我的textarea下。我在想這是否可以在textarea上使用mousemove事件來跟蹤鼠標座標,但是我認爲這樣做對我沒有好處,因爲如果突出顯示跨越,我無法確定確切的邊界。是jquery中的元素點

my html setup

所以現在的問題是,我該如何模擬鼠標懸停及移出事件元素不接受這些,因爲他們是在其它元素(S)?

編輯:

我完成了基於馬庫斯的回答解決類似的問題。鼠標懸停/鼠標事件的完整代碼:

var mouseDown = false; 
var mouseIsOver = false; 
var lastOverElem = false; 
textarea.mousemove(function(e) { 
    if (!mouseDown) { 
     textarea.hide(); 
     var elm = $(document.elementFromPoint(e.pageX, e.pageY)); 
     textarea.show(); 
     if (elm.hasClass("highlighted")) { 
      /* MOUSE MOVE EVENT */ 
      if (!mouseIsOver) { 
       mouseIsOver = true; 
       /* MOUSE OVER EVENT */ 
      } 
     } else { 
      if (mouseIsOver) { 
       mouseIsOver = false; 
       if (lastOverElem) { 
        /* MOUSE OUT EVENT */ 
       } 
      } 
     } 
    } 
}); 

$('body').mousedown (function() {mouseDown = true;}); 
$('body').mouseup (function() {mouseDown = false;}); 
+1

http://stackoverflow.com/questions/1009753/pass-mouse-events-through-absolutely-positioned-element有很多想法可以幫助你。 –

+0

非常有趣。但是,我需要在其他元素上方的textarea,以便用戶可以鍵入文本,選擇它,上下文菜單等。pointer-events:none;禁用所有這些功能。此外+1顯示我技術我從來不知道存在 – 19greg96

+1

該頁面上的一個答案建議暫時隱藏文本區域,然後使用document.elementFromPoint方法將事件傳遞給覆蓋的元素。不知道這將有多好。 –

回答

2

您可以使用document.elementFromPoint。顯然,如果textarea位於底層突出顯示容器的前面,則這不起作用,但的應用程序。您只需在撥打document.elementFromPoint之前暫時隱藏textarea,然後直接顯示。

var textarea = $("#linksTextarea"); 
textarea.on("mousemove", function(e) { 
    // Temporarily hide the textarea 
    textarea.hide(); 
    // Get element under the cursor 
    var elm = $(document.elementFromPoint(e.pageX, e.pageY)); 
    // Show the textarea again 
    textarea.show(); 
    if (elm.hasClass("highlighted")) { 
     console.log("You're mouse is over highlighted text"); 
    } 
}); 

由於DOM而它的渲染被延遲,直到所有的JavaScript執行後,您不必擔心任何視覺毛刺實時更新。

請參閱test case on jsFiddle

+0

我修改了你的小提琴以添加mousemove事件。但我希望你能對此發表意見。所以.. http://jsfiddle.net/pLQYM/1/你怎麼看?它太冒險了嗎?或者它會在大型項目中站穩腳跟嗎? – 19greg96

+1

@ 19greg96爲什麼它太黑客?沒有更好的方法來做到這一點;)我可能會結合使用'mousedown'和'mouseup',並且使用'document'而不是'body',因爲它的選擇有點快。 [這是更新的小提琴](http://jsfiddle.net/pLQYM/3/)。 – mekwall