如何强制定位元素与可见浏览器区域保持一致?

jes*_*vin 9 javascript css jquery

我有一个脚本将"popup"元素插入DOM.它在click事件上设置相对于鼠标坐标的其topleftcss属性.除了这些"弹出"元素的高度是可变的并且其中一些超出浏览器窗口的可视区域之外,它的效果很好.我想避免这个.

替代文字

这是我到目前为止所拥有的

<script type="text/javascript">
    $(function () {
        $("area").click(function (e) {
            e.preventDefault();

            var offset = $(this).offset();
            var relativeX = e.pageX - offset.left;
            var relativeY = e.pageY - offset.top;

            // 'responseText' is the "popup" HTML fragment
            $.get($(this).attr("href"), function (responseText) {
                $(responseText).css({
                    top: relativeY,
                    left: relativeX
                }).appendTo("#territories");

                // Need to be able to determine
                // viewable area width and height
                // so that I can check if the "popup" 
                // extends beyond.

                $(".popup .close").click(function () {
                    $(this).closest(".popup").remove();
                });
            });
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

小智 7

您可以将窗口宽度/高度与窗口的scrollTop,scrollLeft等进行比较.

以下是一些方法供您查看:

$(window).width()
$(window).height()
$(window).scrollTop()
$(window).scrollLeft()
$(window).scrollWidth()
$(window).scrollHeight()
Run Code Online (Sandbox Code Playgroud)

看一下这些方法的jQuery文档.根据您想要的行为,您需要将弹出窗口的宽度和位置与窗口的当前可见区域(由滚动尺寸确定)进行比较.

http://api.jquery.com/scrollTop/ ..等


jes*_*vin 1

我想出了一个解决办法。我在原始问题中的 4 行注释处添加了以下代码。

var diffY = (popup.offset().top + popup.outerHeight(true)) - $(window).height();
if (diffY > 0) {
  popup.css({ top: relativeY - diffY });
}

var diffX = (popup.offset().left + popup.outerWidth(true)) - $(window).width();
if (diffX > 0) {
  popup.css({ left: relativeX - diffX });
}
Run Code Online (Sandbox Code Playgroud)

@liquidleaf为我指明了正确的方向,所以+1,谢谢。