关于延迟顺序显示, 怎么敲代码才能优雅实现?

鼠标移入<p id="test">test</p>, 2秒后在<p id="info"></p>中提示mouseenter.

鼠标移出<p id="test">test</p>, 在<p id="info"></p>中提示mouseleave.

要求leave的信息必须等mouseenter显示后,再显示(有顺序)。 应该怎么写事件?

阅读 1.6k
2 个回答

Try this:

var $test = $('#test'),
    $info = $('#info'),
    status;

$test.on('mouseenter',function(){
    status = "";
    $info.text('mouseenter').fadeOut(0).delay(2000).fadeIn(300, function(){
        status === "out" ? $(this).text('mouseleave') : status = "in";
    });
});

$test.on('mouseout',function(){
    status === "in" ? $info.text('mouseleave') : status = "out";
});
<body>
<span id="btn">11111111111111</span>
</body>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
var $btn = $('#btn');
var eventCallbacks = [];
var timer = null;
$btn.on('mouseenter',function(){
    clearTimeout(timer);
    eventCallbacks = [];
    eventCallbacks.push(function(){
        $btn.text('in');
    });
    var timer = setTimeout(function(){
        for(var i=0;i<eventCallbacks.length;i++){
            debugger;
            eventCallbacks[i]();
        }    
    },2000)            
});
$btn.on('mouseout',function(){
    eventCallbacks.push(function(){
        $btn.text('out');
    })
});

</script>

这么写能实现,就是看起来有些丑。

推荐问题