下拉菜单确实在浏览器屏幕上消失了-引导4

时间:2018-07-05 07:11:52

标签: javascript jquery html5 css3 bootstrap-4

我尝试在悬停时构建多个下拉列表。但是,子下拉菜单不在浏览器屏幕中。 我想反转下拉菜单的位置,使之脱离浏览器屏幕。

enter image description here

在这里,当下拉菜单超出屏幕时,我尝试使用以下jQuery添加动态类。但是,它无法正常工作。 它会在每个下拉菜单中添加addClass,而不是关闭浏览器屏幕。

仅适用于哪些浏览器屏幕不可用。

我要撤消浏览器屏幕中退出的每个下拉菜单。

这有什么问题吗?

$('#menu .dropdown-menu').each(function() {
    var menu = $('#menu').offset();
    var dropdown = $(this).parent().offset();
    var docW = $("#menu").width();

    var i = (dropdown.left + $(this).width()) > (docW);

    if (!i) {
        $(this).addClass('dropdown-reverse');
    } else {
        $(this).removeClass('dropdown-reverse');
    }
});

演示: https://jsfiddle.net/gn3koo0w/1/

2 个答案:

答案 0 :(得分:0)

这可能不是一个合适的解决方案,但它应该可以满足您的要求。 以此替换您的jquery代码,然后尝试。

// dropdown menu on hover 
var $screensize = $(window).width();
$('.dropdown').on("mouseover", function() {

            $(this).find('> .dropdown-menu').stop(true, true).slideDown('fast');
            $(this).bind('mouseleave', function() {

                $(this).find('> .dropdown-menu').stop(true, true).css('display', 'none');
        });
});

function foo() {
$('.dropdown-menu').each(function() {
if ($(this).is(':visible')){
        var menu = $('#menu').offset();
        var dropdown = $(this).parent().offset();
        var docW = $("#menu").width();
        var i = (dropdown.left + $(this).width()) > (docW);
        if (i == true) {
            $(this).addClass('dropdown-reverse');
        } else {
            $(this).removeClass('dropdown-reverse');
        }
    }
    }); 
}
window.setInterval(foo, 100);

希望这会有所帮助!

答案 1 :(得分:0)

我在这里找到了完美的解决方案-Detect if dropdown navigation would go off screen and reposition it

$(function () {
    $(".dropdown li").on('mouseenter mouseleave', function (e) {
        if ($('.dropdown-menu', this).length) {
            var elm = $('.dropdown-menu', this);
            var off = elm.offset();
            var l = off.left;
            var w = elm.width();
            var docW = $(window).width();

            var isEntirelyVisible = (l + w <= docW);

            if (!isEntirelyVisible) {
                $(elm).addClass('dropdown-reverse');
            } else {
                $(elm).removeClass('dropdown-reverse');
            }
        }
    });
});

更新的演示:https://jsfiddle.net/gn3koo0w/166/