繁体   English   中英

DIV的相对位置

[英]Relative Positioning of DIV

有一个名为“ dvUsers”的div。 有一个锚标记“ lnkUsers”。

当单击anchortag时,div必须像在其下方的弹出div一样打开。

同样,divs的相对位置应保持在窗口调整大小和全部大小时。 如何使用javascript / jquery做到这一点?

也许您应该寻找像overLIB这样的预制脚本: http : //www.bosrup.com/web/overlib/ !-)

我的偏好是将它们都放在父div内,如下所示:

<div id="container">
    <a id="lnkUsers" href="#">Users</a>
    <div id="dvUsers" style="display: none;">
        <!-- user content... -->
    </div>
</div>

这些元素的CSS将是:

#container{
    /* ensure that #dvUsers is positioned relatively to this element */
    position: relative;
}
#dvUsers{
    position: absolute;
    /* this value should be based on the font-size of #lnkUsers */
    top: 30px;
    left: -10px;
}

这样可以确保div相对于链接正确定位。 (出于这个问题,我假设父div是“ text-align:left”或浮动的)

JavaScript将如下所示:

$(function(){
    $('#lnkUsers').click(function(){
        $('#dvUsers').slideToggle();
    });
});
$(document).ready(function(){ $("#lnkUsers").click(function(){ $("#dvUser").show("slow"); });

应该首先将style =“ display:none”应用于dvUser,以使其不可见。

您可以使用jQuery插件PositionCalculator

HTML:

  <p><a class="lnkUsers" href="javascript:void(0)">Users Link1</a></p>
  <p><a class="lnkUsers" href="javascript:void(0)">Users Link 2</a></p>
  <p><a class="lnkUsers" href="javascript:void(0)">Users Link 3</a></p>
  <p><a class="lnkUsers" href="javascript:void(0)">Users Link 4</a></p>
  <p><a class="lnkUsers" href="javascript:void(0)">Users Link 5</a></p>
  <p><a class="lnkUsers" href="javascript:void(0)">Users Link 6</a></p>
  <p><a class="lnkUsers" href="javascript:void(0)">Users Link 7</a></p>
  <p><a class="lnkUsers" href="javascript:void(0)">Users Link 8</a></p>
  <p><a class="lnkUsers" href="javascript:void(0)">Users Link 9</a></p>

  <div id="dvUsers" style="display:none; position:absolute; padding:10px; background:rgba(0,0,0,0.8); color:#ffffff">
    I am the popup. <b>Click me to close</b>
    <div class="dynamicInfo"></div>
  </div>

JavaScript的:

jQuery(function($) {
    var $popup = $('#dvUsers');
    var $infoField = $popup.find('.dynamicInfo');

    function showPopup(event) {

        // set content
        $infoField.text('clicked link: ' + $(this).text());

        // reset position
        $popup.show().css({top: 0, left: 0});

        // calculate new position
        var calculator = new $.PositionCalculator({
            item: $popup,
            itemAt: "top left",
            target: this,
            targetAt: "bottom left",
            flip: "both"
        });
        var posResult = calculator.calculate();

        // set new position
        $popup.css({
            top: posResult.moveBy.y + "px",
            left: posResult.moveBy.x + "px"
        });

        // window resize handler
        $(window).off('resize.dvUsers');
        $(window).on('resize.dvUsers', function(event) {
            $popup.css({top: 0, left: 0});
            var newResult = calculator.resize().calculate();
            $popup.css({
                top: newResult.moveBy.y + "px",
                left: newResult.moveBy.x + "px"
            });
        });
    }

    // add click handler for show and hide
    $('.lnkUsers').on('click', showPopup);
    $popup.on('click', function() {
        $popup.hide();
        $(window).off('resize.dvUsers');
    });
});

这是JSBin示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM