javascript - jQuery 滑动和停止问题 : animated element freezes with quick mouse movement

标签 javascript jquery

这里是 Zi JsFiddle .为了重现我的问题,您必须将鼠标悬停在显示“javascript”的链接上,然后将其鼠标移出,然后将鼠标返回。如果您在动画完成之前执行此操作,则粉红色的幻灯片 #subMenu 将滑动中途卡住。有没有办法防止这种情况发生?我已经尝试了一些 .stop()s ,但我真的不希望每次鼠标输入或离开 .navLink 时动画都重新启动。动画应该从它停止的地方开始。换句话说,如果粉红色的部分下降到一半,并且执行了一个 slideDown(),粉红色不应该消失然后向下滑动,它应该从它所在的位置向下滑动。

谢谢!!

JS:

 $('header#subHeader').hide();
    $('.navLink').hover(function () {
        if ($(this).children('div').length > 0) {
            var subMenu = $(this).find('.subMenu').html();
            $('header#subHeader').empty().append('<div>' + subMenu + '</div>').stop().slideDown();
        } else {
            $('header#subHeader').stop().slideUp();
        }
    });
    $('hgroup:first').on('mouseleave', function(){
        $('header#subHeader').slideUp();
    });

最佳答案

使用 stop(true, true) 来完成挂起的动画(跳到最后),这样你就不会得到中间效果。

 $('header#subHeader').hide();
    $('.navLink').hover(function () {
        if ($(this).children('div').length > 0) {
            var subMenu = $(this).find('.subMenu').html();
            $('header#subHeader').empty().append('<div>' + subMenu + '</div>').stop(true, true).slideDown();
        } else {
            $('header#subHeader').stop(true, true).slideUp();
        }
    });
    $('hgroup:first').on('mouseleave', function(){
        $('header#subHeader').slideUp();
    });

Demo

.stop( [clearQueue ] [, jumpToEnd ] )

clearQueue
Type: Boolean
A Boolean indicating whether to remove queued animation as well. Defaults to false.
jumpToEnd
Type: Boolean
A Boolean indicating whether to complete the current animation immediately. Defaults to false.

尝试使用 animate 而不是 slide height 以获得所需的效果,以获得恢复向上/向下滑动动画的感觉:

var slideUpSettings = {
             height: '0px'
         };

var slideDownSettings = {
             height: '20px'
         };


 $('.navLink').hover(function () {
     var $header = $('header#subHeader');
     if ($(this).children('div').length > 0) {

         var subMenu = $(this).find('.subMenu').html();
         $header.empty().append('<div>' + subMenu + '</div>').stop().animate(slideDownSettings, 500);
     } else {

         $header.stop().animate(slideUpSettings, 500);
     }
 });
 $('#subHeader').on('mouseenter', function () {
     $(this).stop().animate(slideDownSettings, 500);
 });


 $('hgroup:first').on('mouseleave', function () {
     $('header#subHeader').stop().animate(slideUpSettings, 500);
 });

Demo

关于javascript - jQuery 滑动和停止问题 : animated element freezes with quick mouse movement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17354086/

相关文章:

javascript - 如何在三个js中改变比例(通过赋值)

javascript - 获取具有计算样式的元素

jquery - 为什么我不能将 jquery-ui 进度条放在固定位置的 div 中?

javascript - 无限滚动和 will_paginate 多次附加项目的 'next page'

javascript - 如何从以下代码中的众多类似按钮中选择被单击的按钮?

jquery - 如何使用 jquery 和 HTML 按钮隐藏/显示 div 内的所有内容?

javascript - 将边距应用于 Canvas 时,HTML5 Canvas 游戏将无法运行

javascript - 使用类名获取元素

javascript - 对象未传递给 jQuery 对话框 OnSubmit 处理程序

javascript - JS 应用程序自动刷新/元素消失编辑