【问题标题】:jQuery slide effect with a toggle?带有切换的jQuery幻灯片效果?
【发布时间】:2010-12-23 01:00:34
【问题描述】:

嘿,伙计们...我正在尝试产生一种效果,如果我单击一个按钮,则 1 面板向左滑动,另一个面板滑入视图。如果我再次单击,当前的会滑开,而之前的会像切换按钮一样滑回。

我有以下代码,它“有点”工作......我的代码在第一次点击时看起来不错,但第二次,面板在查看之前先隐藏。

所以为了简化我正在寻找的是假设您有 2 个 400x600 的 div,并且默认情况下您正在查看 div 1,当单击按钮时,div 1 向左滑出视图,并且 div 2 也滑入隐藏 div 1 后从左侧开始,再次单击时,div 2 向左滑动,div 1 也从左侧滑回......它切换......

jQuery(".button").click(function() {
    var $lefty = jQuery(".home");
       $lefty.animate({
       left: parseInt($lefty.css('left'),10) == 0 ? -$lefty.outerWidth() : 0}, 

 function() {
    jQuery(".member_home").show();
    var $lefty = jQuery(".member_home");
       $lefty.animate({
       left: parseInt($lefty.css('left'),10) == 0 ? -$lefty.outerWidth() : 0
});

});
    return false;
});

如果有人能在这里帮我一把,那就太好了!谢谢!

【问题讨论】:

    标签: jquery toggle slide


    【解决方案1】:

    我认为问题在于您总是在为.home 设置动画,然后是.member_home,而实际上并非一直如此。当.home 不在屏幕上时,您想先将.member-home 动画到屏幕外,然后再将.home 动画化。您看到的效果是因为您总是在同一空间内为divs 设置动画顺序,无论哪个在屏幕外。

    这是一个添加逻辑的函数,可以解决这个问题:

    function toggleDivs() {
        var $home = $("#home");
        var $memberHome = $("#member-home");
        var $slideOut, $slideIn;
    
        // See which <divs> should be animated in/out.
        if ($home.position().left < 0) {
            $slideIn = $home;
            $slideOut = $memberHome;
        }
        else {
            $slideIn = $memberHome;
            $slideOut = $home;
        }
    
        $slideOut.animate({
            left: "-" + $slideOut.width() + "px"
        }, function() {
            $slideIn.animate({ left: "0px" });
        });
    }
    

    然后从您的按钮单击处理程序中调用该函数:

    $("button").bind("click", function() {
        toggleDivs();
    });
    

    在此处查看一个工作示例:http://jsfiddle.net/andrewwhitaker/qSvDz/

    【讨论】:

    • 是的,你完全正确!感谢您花时间向我展示这个示例……非常感谢。我是 JS 新手,请问为什么可以像 PHP $home 一样声明变量?为什么需要美元符号? var $home 是否等于 var home?
    • @Rick:使用美元符号只是我用来明确该变量包含 jQuery 结果的约定。您不需要美元符号,我想这只是在处理具有大量变量的项目后的习惯,能够查看变量并告诉它有一个 jQuery 结果是很有用的。
    • 我明白了,谢谢你的解释,但是当我看到这个时,我立刻想到了 PHP 变量......呵呵..
    【解决方案2】:

    将第二个面板的滑入设为回调函数。然后它不会滑入,直到第一个面板被隐藏。 编辑

    jQuery(".button").click(function() {
        var $lefty = jQuery(".home");
           $lefty.animate({
           left: parseInt($lefty.css('left'),10) == 0 ? -$lefty.outerWidth() : 0}, 
    
     function() {
        jQuery(".member_home").show(400,function() {
            var $lefty = jQuery(".member_home");
               $lefty.animate({
               left: parseInt($lefty.css('left'),10) == 0 ? -$lefty.outerWidth() : 0
        });
    });
    
    });
        return false;
    });
    

    【讨论】:

    • 那行不通,和我以前做的一样。请注意,第一次点击有效。面板 1 滑出,面板 2 滑入。但第二次点击不起作用。第二次单击隐藏的面板首先出现,然后当前查看的面板(面板 2)滑落,从而导致重叠..
    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2012-07-13
    相关资源
    最近更新 更多