Слайд-панель jQuery с отключением мыши и щелчком мыши

Я пытаюсь сделать простой слайдер панели jQuery и сделать его в основном там, где я хочу, за вычетом двух функций. Вы можете увидеть его версию по адресу: http://jsfiddle.net/7WArj/.

В настоящее время панель скользит вниз по содержимому и закрывается при нажатии кнопки закрытия. Кнопка меняется, потому что я хочу, чтобы изображение, которое в конечном итоге станет кнопкой, указывало вверх при открытии и вниз при закрытии.

Я хотел бы добавить функциональность, которая, когда вы больше не наводите курсор на панель, истечет время ожидания и скользит обратно через x секунд.

Я также хотел бы добавить функциональность, согласно которой, если вы щелкнете где-нибудь за пределами слайд-панели, это также вызовет скольжение панели вверх.

Я пробовал некоторые из них с .toggle() и .bind, но не смог заставить их работать должным образом. Меню будет случайным образом скользить вверх и вниз и т. д.

Если есть лучший способ написать мой код, я был бы очень признателен.


person tr3online    schedule 03.08.2012    source источник


Ответы (2)


Я почти уверен, что это то, что вы хотите, код прокомментирован тем, что я сделал:

Демонстрация: http://jsfiddle.net/SO_AMK/jhYWk/

jQuery:

jQuery(document).ready(function() {
    jQuery("div#toppanel").attr('tabindex', -1); //Let the DIV have focus

    jQuery("div#toppanel").blur(function(){
        jQuery("div#panel").animate({height: "0px"}, "fast"); // On blur, hide it
    });

    timerRunning = false;
    jQuery("div#panel").hover(function(){ //on mouse over clear a timeout if it exists
        if (timerRunning) {
            clearTimeout(hoverTimeout);
            timerRunning = false;
        }
    },
    function(){ //on mouse out set the timeout
        hoverTimeout = setTimeout(function(){
            jQuery("div#panel").animate({height: "0px"}, "fast");
        }, 2000);
        timerRunning = true;
    });

    jQuery('#toppanel').click(function(event){
         event.stopPropagation();
     });

    jQuery("div.panel_button").click(function(){
        jQuery("div#panel").focus().animate({ height: "250px" }, "fast");
        jQuery("div.panel_button").toggle()
    }); 

    jQuery("div#hide_button").click(function(){
        jQuery("div#panel").animate({height: "0px"}, "fast"); 
    });
});

CSS:

#toppanel {
    outline: 0; /* Remove yellow outline in Chrome */
    z-index: 25;
    text-align: center;
    position: absolute;
    top: 0px;
    left: 0px;
}
#panel {
    position: relative;
    height: 0px;
    margin-left: auto;
    margin-right: auto;
    z-index: 10;
    overflow: hidden;
    text-align: left;
    height: 0px;
    display: block;
    background-color: #efefef;
    border: 1px solid #000;
    width: 150px;
}
#panel_contents {
    height: 100%;
    width: 603px;
    position: absolute;
    z-index: -1;
}
.the_content {
    margin-top:40px;
}

​ HTML: То же

person A.M.K    schedule 03.08.2012
comment
Похоже именно то, что я хочу. Спасибо! - person tr3online; 03.08.2012
comment
Кажется, что все еще есть некоторая проблема с состояниями кнопки нажата / вверх, и меню очень быстро появляется обратно в зависимости от того, что вы делаете и когда вы это делаете. - person tr3online; 03.08.2012
comment
Нет проблем, но пока я обнаружил две ошибки в коде, так что вы должны проверить это. P.S. Вам не нужно использовать jQuery внутри определенных функций jQuery, вы можете просто использовать $ как обычно, даже если у вас есть другая библиотека, которая его использует. - person A.M.K; 03.08.2012
comment
О, упс. Я думаю, это происходит, когда вы случайно дважды щелкаете. Теперь исправлено, функция фокуса перемещается с содержимого на весь слайдер. - person A.M.K; 03.08.2012
comment
Если я ответил на ваш вопрос, пожалуйста, нажмите на галочку слева от моего ответа, спасибо. - person A.M.K; 03.08.2012
comment
Спасибо за обновления. Я ценю помощь. Извините за задержку с приемкой, я был в отъезде. - person tr3online; 14.08.2012

он работает хорошо, но я обнаружил проблему, если вы откроете его с помощью «Кнопки вниз», а не мыши, и подождите, пока он закроется => Хорошо.

Проблема на данный момент, если вы откроете его снова с помощью «Button Down», он сразу же закроется.

Если можно, я предлагаю решение закрыть, пока мышка остается, поэтому

$( "#toppanel" ).mouseleave(
function( event ){
    var container = $( "#panel" );
    if (container.is( ":visible" )){
    $('#panel').delay(1800).slideUp(300);}
});
person jmayeux    schedule 04.09.2012