Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery动态定位元素_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 使用jQuery动态定位元素

Javascript 使用jQuery动态定位元素,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我在一个菜单栏上工作,每个菜单栏项都是一个图像,当用户将鼠标放在菜单项上时,会出现一个带有子菜单的div 我想将div直接放在适当的图像项下(没有空格,div将在所有元素上方悬停),右侧对齐,这意味着div的右上角应该位于图像的右下角 因为我不能也不想硬编码div的位置,所以我想动态地进行 现在我有这个: $('img').each(function(){ jQuery(this).mouseenter(function(){ var m

我在一个菜单栏上工作,每个菜单栏项都是一个图像,当用户将鼠标放在菜单项上时,会出现一个带有子菜单的div

我想将div直接放在适当的图像项下(没有空格,div将在所有元素上方悬停),右侧对齐,这意味着div的右上角应该位于图像的右下角

因为我不能也不想硬编码div的位置,所以我想动态地进行

现在我有这个:

$('img').each(function(){                     
   jQuery(this).mouseenter(function(){
     var menuItem = $('#' + this.id + '_menu'); //get the needed div 
     var imgRight = this.offset() + this.width();


   });
 });
offset()
方法具有
top
left
属性,您需要使用它们,例如:

var imgRight = this.offset().left + this.width();
var imgTop = this.offset().top + this.height();
在此之后,您必须为div提供
绝对
定位,以将其放置在图像下方:

menuItem.css({
  position:'absolute',
  top: imgTop,
  left: imgLeft,
  zIndex:5000
});
因此,您的代码变成:

$('img').each(function(){                     
   jQuery(this).mouseenter(function(){

   var menuItem = $('#' + this.id + '_menu'); //get the needed div 
   var imgRight = this.offset().left + this.width();
   var imgTop = this.offset().top + this.height();

     menuItem.css({
       position:'absolute',
       top: imgTop,
       left: imgLeft,
       zIndex:5000
     });

     // now show the corresponding div
     menuItem.show('slow');

   });
});
更多信息:

offset()方法具有
top
left
属性,您需要使用它们,例如:

var imgRight = this.offset().left + this.width();
var imgTop = this.offset().top + this.height();
在此之后,您必须为div提供
绝对
定位,以将其放置在图像下方:

menuItem.css({
  position:'absolute',
  top: imgTop,
  left: imgLeft,
  zIndex:5000
});
因此,您的代码变成:

$('img').each(function(){                     
   jQuery(this).mouseenter(function(){

   var menuItem = $('#' + this.id + '_menu'); //get the needed div 
   var imgRight = this.offset().left + this.width();
   var imgTop = this.offset().top + this.height();

     menuItem.css({
       position:'absolute',
       top: imgTop,
       left: imgLeft,
       zIndex:5000
     });

     // now show the corresponding div
     menuItem.show('slow');

   });
});
更多信息:


您不必硬编码或计算这些项目的位置。以下任何CSS规则都应该达到您的目标:
position:relative;右:0
浮点:右:


最好能看到一些用于附加测试的标记。这是一个很好的资源。

您不必硬编码或计算这些项目的位置。以下任何CSS规则都应该达到您的目标:
position:relative;右:0
浮点:右:


最好能看到一些用于附加测试的标记。这是一个很好的资源。

有两种方法可以做到这一点:正确的方法或欺骗的方法。。。 正确的方法:您需要获取驱动对象的顶部和客户端高度-客户端高度没有问题,只需调用它-但顶部意味着您也必须获取所有父对象的高度-使用以下方法:

function J_pos(o)
{
    var x,y;
    y=o.offsetTop;
    x=o.offsetLeft;
    o=o.offsetParent;
    while(o)
    {
        y+=o.offsetTop;
        x+=o.offsetLeft;
        o=o.offsetParent;
    }
    return [x,y];
};
现在,顶部和客户端高度可以执行以下操作:

<div style=top:"+(p[0]+obj.clientHeight)+";left:"+p[1]>

有两种方法可以做到这一点:正确的方法或欺骗的方法。。。 正确的方法:您需要获取驱动对象的顶部和客户端高度-客户端高度没有问题,只需调用它-但顶部意味着您也必须获取所有父对象的高度-使用以下方法:

function J_pos(o)
{
    var x,y;
    y=o.offsetTop;
    x=o.offsetLeft;
    o=o.offsetParent;
    while(o)
    {
        y+=o.offsetTop;
        x+=o.offsetLeft;
        o=o.offsetParent;
    }
    return [x,y];
};
现在,顶部和客户端高度可以执行以下操作:

<div style=top:"+(p[0]+obj.clientHeight)+";left:"+p[1]>

以及如何在图像下放置div?我需要计算位置还是有更好的方法?@ilann:是的,你需要一个更大的值,我在回答中加了这个。div的左边位置不正确。div的右边框与img的右边框不对齐@@ilann::您应该在jsbin.com之类的东西中发布您的工作演示,让我们看看。以及如何将div放置在图像下?我需要计算位置还是有更好的方法?@ilann:是的,你需要一个更大的值,我在回答中加了这个。div的左边位置不正确。div的右边框与img的右边框不对齐@@ilann::您应该在jsbin.com之类的网站上发布您的工作演示,让我们看看。您有什么问题?您肯定必须使用
$(this).offset()
$(this).width()
。我问是否还有其他东西可以使用,您有什么问题?您必须使用
$(this).offset()
$(this).width()
。我问是否还有其他东西可以使用