使用jQuery单击操作后重新启动功能

Posted

技术标签:

【中文标题】使用jQuery单击操作后重新启动功能【英文标题】:Restart function after click action with jQuery 【发布时间】:2012-12-28 11:26:10 【问题描述】:

我有一些看起来像这样的函数:

var live_search_list = $('.live_search_list ul'),
    active_search_element = live_search_list.find('li.active'),
    search_element = live_search_list.find('li'),
    jsPane = $('.jspPane'); 

$('.bottom_search').click(function()
    if (!search_element.last().hasClass('active')) 
        active_search_element.removeClass('active');
        active_search_element.next('li').addClass('active');
        jsPane.animate(top:"-=95px");
    
);
$('.top_search').click(function()
    if (!search_element.first().hasClass('active')) 
        active_search_element.removeClass('active');
        active_search_element.prev('li').addClass('active');
        jsPane.animate(top:"+=95px");
    
);

所以,第一次点击后问题就开始了,我只有一个动作 - 动画。第一次点击后功能不再检查我的状况,也没有改变,删除类active。每次单击此按钮后如何重新启动此功能?

【问题讨论】:

你想stop()动画吗? 我想在每次点击后检查我的状况,现在第一次点击后一切正常,但之后我只有动画动作...... 您确定search_elementactive_search_element 在第二次和后续点击时是有效元素吗?对于 epascarello 所说的 +1 - 除了任何事情 - 在再次开始动画之前 stop() 总是个好主意,否则,如果用户在短时间内单击几次,您的动画将排队,一切都会变得跳跃。 【参考方案1】:

将下一个li 设为活动类后,您需要在active_search_element 中重新缓存它

var live_search_list = $('.live_search_list ul'),
    active_search_element = live_search_list.find('li.active'),
    search_element = live_search_list.find('li'),
    jsPane = $('.jspPane'); 

$('.bottom_search').click(function()
    if (!search_element.last().hasClass('active')) 
        active_search_element.removeClass('active');
        active_search_element.next('li').addClass('active');
        active_search_element = live_search_list.find('li.active')
        jsPane.animate(top:"-=95px");
    
);
$('.top_search').click(function()
    if (!search_element.first().hasClass('active')) 
        active_search_element.removeClass('active');
        active_search_element.prev('li').addClass('active');
        active_search_element = live_search_list.find('li.active')
        jsPane.animate(top:"+=95px");
    
);

【讨论】:

当然,现在活动类附加到第二个元素并永远保留它,非常感谢帮助,BR【参考方案2】:

您没有将active_search_element 设置为新的活动元素!

行:

active_search_element = live_search_list.find('li.active')

只选择当时的元素,它不会神奇地保持更新。

$('.bottom_search').click(function()
    if (!search_element.last().hasClass('active')) 
        active_search_element.removeClass('active');
        active_search_element = active_search_element.next('li').addClass('active');
        jsPane.animate(top:"-=95px");
    
);

$('.top_search').click(function()
    if (!search_element.first().hasClass('active')) 
        active_search_element.removeClass('active');
        active_search_element  = active_search_element.prev('li').addClass('active');
        jsPane.animate(top:"+=95px");
    
);

【讨论】:

它适用于,谢谢,我认为这也是更灵活的编写方式

以上是关于使用jQuery单击操作后重新启动功能的主要内容,如果未能解决你的问题,请参考以下文章

统一单击重新启动按钮后如何显示广告然后重新启动场景?

重新启动后,按钮单击时,小组件onUpdate未设置pendingIntent

如何在 jquery transit 中暂停和重新启动 css3 转换

持久功能 - 空闲后重新启动的活动功能?

XAMPP - 重新启动 apache 的快速方法?

NSURLSession downloadTaskWithResumeData 在重新启动应用程序后给出错误