JQuery исчезать в приоритете исчезать - PullRequest
1 голос
/ 20 декабря 2011

Недавно я писал о эффекте наведения с помощью наведения.

Теперь все работает нормально, но мне было интересно, есть ли способ расставить приоритеты для эффекта. Например, если пользователь быстро просматривает последовательность смены изображений, анимации требуется некоторое время. Я не возражаю против продолжения анимации, но мне бы хотелось, чтобы объект, который в данный момент перемещается, сразу исчез.

Вот мой код на данный момент:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js" type="text/javascript"></script>
<title>Robs Test</title>
<style>
body{background:gray;}
div{position:relative;}
.box{
    position:relative;
    width:150px;
    height:150px;
    float:left;
    display:block;
    background:black;
    margin-right:20px;
}
.boxover{
    position:absolute;
    top:10px;
    left:0px;
    width:100%;
    height:20px;
    z-index:100;
    background:white;
    display:none;
}
</style>
<script type="text/javascript">
    $(function(){
        $('.box').hover(over, out);
    });


    function over(event){
        var over_id = '#box_over_' + $(this).attr('id').replace('over_','');

        $(over_id).fadeIn(400);
        $(over_id).css("display","normal");

    }
    function out(event) {
        var over_id = '#box_over_' + $(this).attr('id').replace('over_','');

        $(over_id).fadeOut(400);

    }

</script>

</head>

<body>
<a href="#" class="box" id="over_1"><img src="pier.jpg" alt="test" width="150" height="150" /><div id="box_over_1" class="boxover">hello</div></a>
<a href="#" class="box" id="over_2"><img src="pier.jpg" alt="test" width="150" height="150" /><div id="box_over_2" class="boxover">there</div></a>
<a href="#" class="box" id="over_3"><img src="pier.jpg" alt="test" width="150" height="150" /><div id="box_over_3" class="boxover">rob</div></a>


</body>

</html>

Есть ли что-то, что я могу сделать, чтобы div занимал приоритетное место над другими? Поэтому мне не нужно ждать завершения анимации.

Приветствия

Rob

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Вы можете использовать функцию stop в jQuery, чтобы сделать ее лучше. Это остановит анимацию в процессе.

function over(event){
    var over_id = '#box_over_' + $(this).attr('id').replace('over_','');

    $(over_id).stop(true, true).fadeIn(400);
    $(over_id).css("display","normal");

}
function out(event) {
    var over_id = '#box_over_' + $(this).attr('id').replace('over_','');

    $(over_id).stop(true, true).fadeOut(400);

}
0 голосов
/ 20 декабря 2011

Связано с тем, с чем связан @SliverNinja, специально для вашего сценария:

function over(event) {
    var $this = $(this);
    $this.data('hoverTimer', setTimeout(function(){
        timer = null;
        var over_id = '#box_over_' + $this.attr('id').replace('over_', '');

        $(over_id).fadeIn(400);
        $(over_id).css("display", "normal");
    }, 200));
}

function out(event) {
    var timer = $(this).data('hoverTimer');

    if (timer !== null) {
        clearTimeout(timer);   
    }
    var over_id = '#box_over_' + $(this).attr('id').replace('over_', '');

    $(over_id).fadeOut(400);
}

Вот скрипка: http://jsfiddle.net/9RR93/

0 голосов
/ 20 декабря 2011

Я бы запустил анимацию (, особенно если она длинная ), если пользователь наводит курсор на изображение в течение заданного порогового количества времени ( не на каждом пролонгации ).

См. Соответствующий пост о реализации управляемого наведения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...