Jquery добавить щелчок, чтобы сдвинуть панель вверх?

У меня есть следующая панель слайдов, которую я собрал, используя учебные пособия и т. Д.

$(document).ready(function() {

$(".dropdown dt a").click(function() {
    $(".dropdown dd #panel").slideDown(150);
});

$(".dropdown dd #panel a").click(function() {

    $(".dropdown dd #panel").slideUp(150);

});

var myTimeout = null; 
$(".dropdown").bind("mouseleave", function() { 
    myTimeout = window.setTimeout(function() { 
         $(".dropdown dd #panel").slideUp(150); // <-- 1000ms  
    }, 1000);$('.dropdown dt a').removeClass('active'); 
}); 

$(".dropdown dd #panel").bind("mouseenter",function() { 
    window.clearTimeout(myTimeout); 
}); 

});

Однако я не могу понять, как щелкнуть, чтобы открыть панель.

В настоящее время вы щелкаете, и панель скользит вниз, вы входите в панель и выходите, и она снова скользит вверх.

Я хочу добавить, что после того, как вы нажали, чтобы показать панель, вы также можете нажать, чтобы закрыть ее?

Таким образом, у вас есть два способа закрыть его: отодвинуть мышь или снова нажать кнопку. Возможно, добавление активного класса, чтобы у меня была стрелка или что-то, что менялось, чтобы открыть, а затем закрыть?

Кто-нибудь поможет мне добавить функцию резервного копирования по щелчку?

Большое спасибо, если сможете :)

Thanks guys.

Пытался добавить ваш код, Брайан, но мне удалось его полностью сломать, я явно не поместил его в нужное место :(

изменить

Добавление совета Брайана...

$(document).ready(function() {



$(".dropdown dt a").click(function(){
    if($(".dropdown dd #panel").hasclass('open'){
        $(".dropdown dd #panel").slideDown(150).addClass('open');
    } else {
       $(".dropdown dd #panel").slideUp(150).removeClass('open');
    }
});         


$(".dropdown dd #panel a").click(function() {
    $(".dropdown dd #panel").slideUp(150).removeClass('open');;
});

var myTimeout = null; 
$(".dropdown").bind("mouseleave", function() { 
    myTimeout = window.setTimeout(function() { 
         $(".dropdown dd #panel").slideUp(150); // <-- 1000ms  
    }, 1000);$('.dropdown dt a').removeClass('active'); 
}); 

$(".dropdown dd #panel").bind("mouseenter",function() { 
    window.clearTimeout(myTimeout); 
}); 

});


person Jezthomp    schedule 01.11.2010    source источник


Ответы (2)


Вам нужно будет отслеживать состояние панели, потому что у вас есть два триггера закрытия (поэтому простого прослушивателя переключения будет недостаточно). Вы можете добавить переменную js (хорошо, но не очень хорошо) или использовать класс (лучше) для ее отслеживания. Затем условно проверьте, что вы прослушиваете клики, чтобы определить, что делать:

$(".dropdown dt a").click(function(){
    if($(".dropdown dd #panel").hasClass('open'){
        $(".dropdown dd #panel").slideDown(150).addClass('open');
    } else {
       $(".dropdown dd #panel").slideUp(150).removeClass('open');
    }
});

Просто убедитесь, что вы добавили метод removeClass к слушателю close, который у вас есть во внутреннем теге привязки:

$(".dropdown dd #panel a").click(function() {
    $(".dropdown dd #panel").slideUp(150).removeClass('open');;
});
person Brian Flanagan    schedule 01.11.2010
comment
Спасибо, ребята, я добавил ваше предложение выше Брайана, но мне удалось полностью его сломать, я полагаю, что поместил его не в то место :( - person Jezthomp; 01.11.2010
comment
Вероятно, вам нужно изменить имя класса с «открытого» на «активный». (Я использовал «open» для демонстрационных целей.) Если вы хотите опубликовать быструю демонстрацию на jsFiddle или достаточно разметки и css здесь (если она сосредоточена на этой конкретной проблеме), это поможет в отладке. - person Brian Flanagan; 01.11.2010
comment
Я также заметил опечатку в своем фрагменте кода (это должно было быть «hasClass» вместо «hasclass»). Вот что происходит, когда я кодирую без отладчика... - person Brian Flanagan; 02.11.2010
comment
Еще раз спасибо, Брайан, я разместил здесь все необходимые фрагменты... Все еще не сползаю вниз :( jsfiddle.net/mjVRj/1 - person Jezthomp; 02.11.2010
comment
Извините за это... мой код был немного неверным. Я разветвил ваш пример здесь и заставил его работать... Я немного очистил CSS во время отладки, поэтому он не будет выглядеть точно так же, но логика должна работать.) У меня были события слайдов в обратном порядке. - person Brian Flanagan; 02.11.2010
comment
Красиво, это прекрасно, большое спасибо :) Сложно добавить активный класс к кнопке, которую вы нажимаете, чтобы свернуть панель или нет? - person Jezthomp; 02.11.2010
comment
Не уверен, зачем якорю нужен класс состояния... Если я его вставлю, это будет ошибка, и вы, вероятно, сможете безопасно удалить его. (Если вам не нужно отслеживать состояние привязки для какой-либо другой функциональности.) - person Brian Flanagan; 02.11.2010
comment
Нет, я имею в виду, если бы я хотел, чтобы стрелка, например, менялась при нажатии или отсутствии щелчка, которая должна быть на ссылке a, а не на панели, похоже, что активная ссылка в данный момент находится на панели, если только я не прочитал это неправильно. .. Еще раз спасибо за помощь :) - person Jezthomp; 02.11.2010
comment
Ах. Да, продолжайте и добавляйте/удаляйте класс в теге привязки, когда вы открываете/закрываете панель. Это не обязательно должны быть те же термины класса, что и у панели (потому что, хотя это и индикатор состояния, он предназначен для другого элемента), и убедитесь, что вы ориентируетесь на свой CSS, чтобы любой стиль, который вы хотите на привязке, также не применяется к панели и наоборот - person Brian Flanagan; 02.11.2010

Взгляните на пример 4a http://www.webdesignerwall.com/tutorials/jquery-tutorials-for-designers/

person superUntitled    schedule 01.11.2010