如何在页面刷新时停止jQuery动画重启?

时间:2013-03-01 21:21:57

标签: jquery jquery-animate reload page-refresh

我创建了一个使用jquery动画的搜索表单,例如NextLevelSearch。 我希望当我打开搜索表单并刷新页面时,这不会关闭。 我怎么能做到这一点?

我尝试使用e.preventDefault();return false;,但无效,我知道这与我的问题无关。

这是我的代码:

$globalsearch_submit.click(function(){
    $('#stat').hide();
    $('.wrapper-simple').animate({'width':'275px'})
        .end().find('.wrapper-simple input[type=text]').css({opacity: 0, visibility: "visible"}).animate({'width': '231px', opacity: 1}) 
        .end().find('.wrapper-simple .button').animate({ 'right': '40px' })
        .end().find('.wrapper-simple input[type=submit]').animate({'marginLeft':'235px', opacity: 1}, 10)               
    return false;
}); 
$('.wrapper-simple input[type=submit]').click(function() {
    $('#stat').show();
    $('#stat').delay(500).css('opacity',0).show().animate({opacity:1},100); 

    $('.wrapper-simple').animate({'width':'40px'}) 
        .end().find('.wrapper-simple input[type=text]').animate({'width': '1px', opacity: 0})
        .end().find('.wrapper-simple .button').animate({ 'right': '0' })
        .end().find('.wrapper-simple input[type=submit]').animate({'marginLeft':'0', opacity: 0}).attr('value', ''); 
    return false;
});

请帮忙!谢谢。

(对不起我的英语不好)

1 个答案:

答案 0 :(得分:2)

我会使用文档hash(window.location.hash)来保存页面的当前状态;

$('.wrapper-simple input[type=submit]').click(function() {
    $('#stat').show();
    $('#stat').delay(500).css('opacity',0).show().animate({'opacity':1},100); 

    $('.wrapper-simple').animate({'width':'40px'}) 
        .end().find('.wrapper-simple input[type=text]').animate({'width': '1px', 'opacity': 0})
        .end().find('.wrapper-simple .button').animate({'right': 0})
        .end().find('.wrapper-simple input[type=submit]').animate({'marginLeft': 0, 'opacity': 0}).attr('value', '');

    document.location.hash='form';

    return false; // not related to this, but needed for other reasons
});

(在该示例中,我将其设置为“form”,因此单击按钮后,您的页面URL将显示为“mysite.com/mypage.htm#form”。您可以使用任何您喜欢的内容,但有一定的限制允许使用字符 - 请参阅此答案:List of valid characters for the fragment identifier in an URL?

然后,您可以在页面加载时检测到此标记:

$(document).ready(function(){
    var h=window.location.hash.replace(/^#/,'');
    if(h==='form'){
        $('#stat').css({'opacity':1}).show(); 

        $('.wrapper-simple').css({'width':'40px'}) 
            .end().find('.wrapper-simple input[type=text]').css({'width': '1px', 'opacity': 0})
            .end().find('.wrapper-simple .button').css({'right': 0})
            .end().find('.wrapper-simple input[type=submit]').css({'marginLeft': 0, 'opacity': 0}).attr('value', '');
    }
}

请注意,我已复制代码但更改了对简单css调用的任何动画调用,以立即更改它。

这意味着,一旦用户点击按钮,任何页面刷新,书签,关闭和重新打开书签等都将意味着表单立即打开(页面加载时略有闪烁) ,这是更多的工作要避免)。此外,这不使用cookie,这会越来越成问题。要将表单再次标记为关闭,您可以将哈希设置为其他内容(例如空字符串)。

Twitter,谷歌,Facebook和其他许多人都使用这种技术。