Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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可靠地查找HTML元素的位置_Javascript_Jquery_Html_Css - Fatal编程技术网

如何使用javascript可靠地查找HTML元素的位置

如何使用javascript可靠地查找HTML元素的位置,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有一个html块,它由许多组成。 我使用这些通过在目标时改变其不透明度来创建模式窗口(在CSS中完成)。 这些通过id进行区分,并且都具有相同的类名。 s的边框为10px。鼠标悬停时,边框将更改为38px,仅适用于左右边框(在css中完成)。 鼠标悬停时,我想显示后退和下一个箭头,使其正好出现在左右两侧边框的中间。不同的“div”有不同的高度 我的做法: 我已经使用event.target.id获取调用该函数的的id。 然后我使用getBoundingClientRect()在屏幕上获得该元素

我有一个html块,它由许多
组成。 我使用这些
通过在
目标时改变其不透明度来创建模式窗口(在CSS中完成)。
这些
通过
id
进行区分,并且都具有相同的类名。
s的边框为10px。鼠标悬停时,边框将更改为38px,仅适用于左右边框(在css中完成)。 鼠标悬停时,我想显示后退和下一个箭头,使其正好出现在左右两侧边框的中间。不同的“div”有不同的高度

我的做法: 我已经使用
event.target.id
获取调用该函数的
id
。 然后我使用
getBoundingClientRect()
在屏幕上获得该元素的矩形表示。 我使用
.top
.bottom
.left
.right
获得每四个点的x和y坐标。从这些点中,我找到高度,然后将
s
.left
.right
设置为与之相等。 我使用了
警报(
)来返回结果,它有时返回正确的值,有时根本不返回任何值。返回的结果是这两种情况之一。而箭头并没有放在它们应该放的地方。我对Javascript还很陌生,我还在学习,所以如果您能解释一下您的答案,我将不胜感激。 HTML代码如下所示:

<html>
<head>
    <script src="jquery-1.11.1.js"></script>
    <script type="text/javascript" src="midpointHeight.js"></script>
    <script type="text/javascript" src="modalDialogHover.js"></script>
</head>

<!--first modal-->  
<a href="#X">
    <image src="X.gif" id="X" class="Gif" />
</a>
<div id="h" class="modalDialog">
 <div id="miniModal_h" class="miniModal" onmouseover="getMidPointHeight(event)">
  <a href="#close" title="Close" class="close" id="close"><div class="close_btn"></div></a>
  <a href="#p" title="Next" class="next" id="next"><div class="next_btn"></div></a>                 
  <p>
     <!--some text here-->
  </p>                              
 </div>
</div>


<!--second modal-->     
<a href="#p">
<image src="p.gif" id="p" class="Gif" />
</a>
<div id="p" class="modalDialog">
    <div id="miniModal_p" class="miniModal" onmouseover="getMidPointHeight(event)">
        <a href="#close" title="Close" class="close"><div class="close_btn"></div></a>
        <a href="#h" title="Back" class="back" id="back"><div class="back_btn"></div></a>
        <a href="#c" title="Next" class="next" id="next"><div class="next_btn"></div></a>
        <p>
            <!--some text here-->
        </p>
    </div>
</div>
</html>
在jQuery中,隐藏/显示面板上的左右按钮:

jQuery(document).ready(function(){
    jQuery(".miniModal").hover(
        function(){
            jQuery(".close_btn").addClass("visible"),
            jQuery(".next_btn").addClass("visible"),
            jQuery(".back_btn").addClass("visible")
        },
        function(){
            jQuery(".close_btn").removeClass("visible"),
            jQuery(".next_btn").removeClass("visible"),
            jQuery(".back_btn").removeClass("visible")
        }
    )
});
在javascript中查找中点高度并在正确位置显示箭头:

function getMidPointHeight(event){

    var miniModal= event.target.id;
    //alert(miniModal);

    var smallRect = document.getElementById(event.target.id).getBoundingClientRect();

    var sX = smallRect.left;
    var sY = smallRect.top;
    var sW = smallRect.right;
    var sH = smallRect.bottom;

    //alert(sX + "," + sY + "," + sW + "," + sH);

    var sHeight = (sH - sY);

    var smidHeight = (sHeight / 2);
    var arrow_loc = (smidHeight)+"px";

    alert(arrow_loc);

    var next_btn = document.getElementById("next_btn");
    next_btn.style.top = arrow_loc;

    var back_btn = document.getElementById("back_btn"); 
    back_btn.style.top = arrow_loc; 
}

建议您在jsfiddle.net中创建一个演示。整个问题听起来应该用纯CSS解决。我以前从未使用过jsfiddle.net,所以我不确定是否所有内容都正确。但这是我的尝试:Nit,还有更多的Div,我认为用javascript覆盖格式可能更容易。但我在想,如果我不能解决这个问题,我必须手动找到每个div的中点。
function getMidPointHeight(event){

    var miniModal= event.target.id;
    //alert(miniModal);

    var smallRect = document.getElementById(event.target.id).getBoundingClientRect();

    var sX = smallRect.left;
    var sY = smallRect.top;
    var sW = smallRect.right;
    var sH = smallRect.bottom;

    //alert(sX + "," + sY + "," + sW + "," + sH);

    var sHeight = (sH - sY);

    var smidHeight = (sHeight / 2);
    var arrow_loc = (smidHeight)+"px";

    alert(arrow_loc);

    var next_btn = document.getElementById("next_btn");
    next_btn.style.top = arrow_loc;

    var back_btn = document.getElementById("back_btn"); 
    back_btn.style.top = arrow_loc; 
}