2011-07-03 92 views
1

我在一個工具中允許人們使用jQuery雙擊並在HTML頁面的任何位置留下消息。它已經成爲消息定位的絆腳石。確定鼠標點擊位置的位置

的代碼,我此刻的測試:

$('body').bind('dblclick', function(e) { 

    var message = $('<div class="message">Form here</div>').css({ 
     'left' : e.pageX, 
     'top' : e.pageY 
    }); 

    $(this).append(message); 
}); 

這將創建在鼠標點擊的位置,一個新的「消息」。雖然這在一定程度上起作用,但只要瀏覽器窗口重新調整大小,「消息」就會移出位置。由於我最終希望保存這些消息(並檢索它們),因此將它們加載到每個瀏覽器上的每個用戶的不同位置並不理想。即使該頁面使用媒體查詢,我也希望郵件附加到頁面佈局。

我對這個問題的理解是,我需要定位相對於用戶點擊的最近元素的消息。問題是。我如何?

任何提示或提示將不勝感激。

更新04/07/11

大多數的答案下面我有過的是不是真的,我追求的。我已經上傳了example of my page to JSfiddle向您展示我的設置。這裏的問題是使消息附加在相對位置,這樣當瀏覽器窗口重新調整大小時,消息隨着內容一起移動。

例如。如果我在頁面的第二段添加消息,不管瀏覽器/設備寬度如何,我都會將該消息粘貼到該段落。據我可以告訴我需要建立最近的塊級元素(或具有ID或類的元素),可以用來定位消息相對於。

希望清除問題&感謝您的所有建議。

+0

忽略我的答案,我的dicklexic屁股沒有正確地閱讀這個問題。你想要做的是將交叉元素插入HTML頁面的最上面的元素。不是從瀏覽器計算X和Y,而是從最上面的元素中完成,這應該表示該框在調整大小時移動。 –

回答

0

這應該說明了如何追蹤鼠標移動http://docs.jquery.com/Tutorials:Mouse_Position#How_do_I_find_the_mouse_position.3F

jQuery(document).ready(function(){ 
    $(document).mousemove(function(e){ 
     $('#status').html(e.pageX +', '+ e.pageY); 
    }); 
}) 

與此相伴,你可以使用resize()改變DIV

$(window).resize(function() { 
    $('body').prepend('<div>' + $(window).width() + '</div>'); 
}); 
+0

嗨Prashant。我的代碼已經在跟蹤鼠標位置。問題稍微複雜一點。 – Scott

0

的位置,我建議把你的頁面上的單個div,具有固定的寬度和高度。然後運用你的dblclick功能於div而不是body

您可能還需要動態div元素絕對定位,所以它們出現在正確的位置。這是一個example fiddle

+0

嗨,詹姆斯。因爲我希望這可以在任何網頁上工作,所以我認爲限制放置郵件的畫布會很困難。也許用寬度和高度爲100%的div包裹身體將會訣竅......你可能只是給了我一個關於我可以嘗試的想法! – Scott

0

您需要定位信息的div:

$('body').bind('dblclick', function(e) { 

    var message = $('<div class="message">Form here</div>').css({ 
     'left' : e.pageX, 
     'top' : e.pageY, 
     'position' : 'fixed', 
     'zIndex': 999999 
    }); 

    $(this).append(message); 
}); 

http://jsfiddle.net/PvFTN/

+0

嗨AlienWebguy。不幸的是,位置固定並不能解決我的問題。內容仍然獨立於消息而移動 - 滾動打破了我正在尋找的行爲。 – Scott

2

據我所知,有可能幾個問題:第一,我可以看到的是,你需要確保「body」元素覆蓋整個頁面,因爲它只會在其框允許的範圍內延伸。 (我通常意識到,簡單地設置div的背景通常可以讓你看到它的範圍,但body tag是一個特殊情況。其背景延伸到瀏覽器的整個可見區域,但它的框可能不)

其次,重要的是將css「position」屬性設置爲「absolute」或絕對定位不起作用:此代碼有效:

$('body').bind('dblclick', function(e){ 

     var message = $('<div class="message">Form here</div>').css({ 
      'position' : 'absolute', 
      'left' : e.pageX, 
      'top' : e.pageY 
     }); 

     $(this).append(message); 
    }); 
+0

嗨,湯姆。感謝您的回答。我忘了提到這些消息已經使用CSS絕對定位了。問題是,重新調整瀏覽器窗口的大小,使絕對位置的內容會導致內容移動並使消息保持在固定位置。我試圖確保郵件始終與網頁內容保持聯繫。在我腦海中實現這一點的唯一方法是與剛纔點擊的內容相對的位置。這是真正的問題。 – Scott

+0

我假設你有一些中央的div,這是一個寬度,然後它的「保證金 - 左」和「保證金 - 右」屬性設置爲自動,讓它保持中心。這意味着,當窗口水平調整大小時,您的絕對定位的div「幻燈片」留在您的中央div上?如果是這樣的話,那麼你應該追加到div,而不是body,是的,relative應該做我認爲的把戲,儘管它可能與box的位置有關,而不是相對於position父母的方框。我會查找並回復你 –