2011-07-03 94 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父母的方框。我会查找并回复你 –