none
ASP.NET 4.0 Menu + границы видимости RRS feed

  • Вопрос

  • Прошу помочь разобраться

    Решил использовать новый рендер Menu из 4ой версии ASP.NET, по меньшей мере для совместимости с Chrome

    однако табличный рендеринг (RenderingMode="Table") лишен этого недостатка

    а именно, раскрывающееся меню выходит за пределы видимости (клиентской области)

    похоже MS не написали логику отработки случая когда меню выходит за границы видимости (для 4 версии)

    Есть идеи как зафиксить?

    Заранее благодарен

    ЗЫ

    show: function() { this.element.style.display = 'block'; }

    вот такой кусок скрипта, и "выше" по стеку также не обнаружен код анализа границ области видимости

    14 июня 2010 г. 7:30

Ответы

  • решил проблему, написал пилюлю, вот и делюсь (jQuery не забудьте подключить)

     

    <script type="text/javascript">

     

    // ASP.NET 4.0 Menu Fix by Valentin Gushan (feedback: valentin.gushan@gmail.com)

            $(window).resize(function () {
                $('.MenuDynamic').each(function () {
                    // сброс на знаачения по умолчанию
                    if ($(this).attr('leftValue')) {
                        $(this).css('left', $(this).attr('leftValue'));
                        $(this).css('right', null);
                        $(this).removeAttr('leftValue');
                    }
                });
            });
            
            $().ready(
                function () {
                    // IE7 zIndex Fix
                    var zIndex = $('.has-popup').length;        
                    $('.has-popup').each(function () {
                        zIndex -= 1;
                        $(this).css('z-index', zIndex);
                    });
                    // bind mouseover handler
                    $('.has-popup').bind('mouseover', function () {
                        var el = $(this).children('ul');
                        // тест был ли отработан случай
                        if (el.attr('leftValue')) return;
                        //
                        var left = el.offset().left;
                        var width = el.width();
                        var winwidth = $(window).width();
                        // проверяем, если справа не умещается, бросаем на лево
                        if (left + width > winwidth) {
                            el.attr('leftValue', el.css('left'));
                            if (width > $(this).offset().left) {
                                // если не умещается слева
                                var offset = winwidth - width - $(this).offset().left - 5;
                                el.css('left', offset + 'px');
                            } else {
                                el.css('right', el.attr('leftValue'));
                                el.css('left', null);
                            }
                        }
                    })
                }
            );
        </script>

    все, пользуйтесь на здоровье новым ASP.NET Menu контролом, только фикс добавьте )

    14 июня 2010 г. 9:27