【问题标题】:Jquery add click to slide up panel?Jquery添加单击以向上滑动面板?
【发布时间】:2010-11-01 12:27:20
【问题描述】:

我有以下幻灯片面板,我使用教程等拼凑在一起......

$(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.

Brian 尝试添加您的代码,但设法完全破坏它,我显然没有把它放在正确的位置:(

编辑

正在添加 Brians 的建议...

$(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); 
}); 

});

【问题讨论】:

    标签: jquery animation panel toggle slide


    【解决方案1】:

    您需要跟踪面板的状态,因为您有两个关闭触发器(因此一个简单的切换侦听器是不够的)。您可以添加一个 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 方法也添加到内部锚标记上的关闭侦听器中:

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

    【讨论】:

    • 谢谢大家,我已经在 Brian 上面添加了你的建议,但我已经设法完全打破它,我想我把它放在错误的地方:(
    • 您可能需要将类名从“open”更改为“active”。 (我使用 'open' 来进行演示。)如果你想在 jsFiddle 上发布一个快速演示,或者你有足够的标记和 css 在这里(只要它专注于这个特定问题),它将有助于调试。
    • 我还注意到我的代码 sn-p 中有错字(它应该是 'hasClass' 而不是 'hasclass')。当我在没有调试器的情况下编码时会发生这种情况......
    • 再次感谢布赖恩,我已经把所有合适的部分都放在这里了……现在还没有滑下来:(jsfiddle.net/mjVRj/1
    • 抱歉……我的代码有点不对劲。我在这里分叉了你的例子并让它工作......@ 987654322@(我在调试时清理了一些css,所以它看起来不完全相同,但逻辑应该工作。)我有幻灯片事件向后。
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多