Как определить, отображается ли вкладка jquery из-за щелчка пользователя или из-за поворота вкладки? - PullRequest
1 голос
/ 28 апреля 2010

Я уже некоторое время использую вкладки пользовательского интерфейса jQuery, и появился интересный запрос. В текущей настройке вкладки используется функция поворота. Мне нужно найти способ определить, отображается ли вкладка из-за результата самого поворота или потому, что пользователь физически нажал на вкладку.

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

У кого-нибудь есть идеи? По сути, я хотел бы сделать что-то дополнительное, если пользователь щелкнул по вкладке, но не если вкладка изменяется сама по себе с помощью поворота.

Если я подключу щелчок даже к самим вкладкам, он, кажется, не срабатывает вообще, я предполагаю, потому что виджет вкладок использует это событие само.

Редактировать: вот основной код

<script type="text/javascript">
$(document).ready(function(){
    $("#featured").tabs(
        {show: function(e, ui) { console.log(e);} }
    ).tabs("rotate", 5000, false);
});
</script>

Консоль покажет событие (e), было ли оно щелкнуто пользователем или показано как часть вращения. Кроме того, то же самое, если я изменю событие с шоу: на выбор:

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Если вы разрабатываете собственную логику вращения вместо использования встроенного метода rotate, тогда вы можете установить флаг, который вы сможете проверить позже. Примерно так должно работать:

var isRotating = false,
    rotationInterval = 5 * 1000, // 5 seconds
    rotationTimerId;

function rotate() {

    var tabsElement = $('#my-tabs'),
        currentIndex = tabsElement.tabs('options', 'selected'),
        maxIndex = tabsElement.tabs('length') - 1,
        nextIndex = currentIndex === maxIndex ? 0 : (currentIndex + 1);

    isRotating = true;
    tabsElement.tabs('select', nextIndex);
    isRotating = false;

}
function startRotation() {

    if (!rotationTimerId) {
        rotationTimerId = window.setInterval(rotate, rotationInterval);
    }

}
function stopRotation() {

    if (rotationTimerId) {
        window.clearInterval(rotationTimerId);
        rotationTimerId = null;
    }

}

$('#my-tabs').tabs({
    select: function() {
        alert(isRotating ? 'this is from the rotation' : 'this is from a user click');
    }
});
startRotation();
1 голос
/ 28 апреля 2010

Из документации jQueryUI :

Это событие срабатывает при нажатии вкладка.

$( ".selector" ).tabs({
   select: function(event, ui) { ... }
});
...