1

ここで問題は、メイン ナビゲーション リンクをクリックするとメイン コンテンツがアニメーション化されますが、同じリンクを 2 回クリックするとコンテンツが消えてしまいます。誰でもこれについて私を助けてください:

ここにリンクがありますhttp://mannatstudio.com/animation/

ここに私が使用しているコードがあります:

var tab, lasttab;
var defaultTab = '#profile-tab';
var direction = "rtl"; // Right To Left

$('.tab').hide();

function showTab(id) {
    id = id.replace("-tab", "");
    //window.location.hash = id;

    if (tab) {
        direction = (tab.attr('data-index') < $(id + "-tab").attr('data-index')) ? "rtl" : "ltr";
        lasttab = tab;
        lasttab.animate({
            'margin-left': (direction == "rtl") ? -0 - $(window).width() : -0 + $(window).width(),
            opacity: 1
        }, 1000, "easeInOutExpo", function () {
            $(this).hide();
        });

        if (tab.attr('id') == "team-tab") {
            $('#members-tab').animate({
                'margin-left': $(window).width(),
                opacity: 1
            }, 1000, "easeInOutExpo", function () {
                $(this).hide();
                $(this).unbind('click');
            });
        }
    }


    $('.nav').find('.current').removeClass('current');
    $('a[href="' + id + '"]').parent().addClass('current').prev().css('');

    tab = $(id + "-tab");
    tab.css({
        'margin-left': (direction == "rtl") ? -0 + $(window).width() : -0 - $(window).width(),
        opacity: 1
    }).show().animate({
        'margin-left': 0,
        opacity: 1,
    }, 1000, "easeInOutExpo");

    if (id == "#team") {
        $('#members-tab').css({
            'margin-left': $(window).width()
        }).show().animate({
            'margin-left': 0
        }, 1000, "easeInOutExpo").find('.tab').show();

    }

    setFooterY();
}

function setFooterY() {
    var h = tab.height() + 150 + 0;

    if (tab.attr('id') == "team-tab") {
        $('#members-tab').height($('#members-tab').find('.page').height() + 0);
        h += $('#members-tab').height() - 0;
    }

    $('#content').height(h);
    $('#vignettage').height(0 + h);
}

if ($('.nav').length > 0 && $('#news-page').length == 0) {
    $('.nav').on('click', 'a', function (e) {
        e.preventDefault();
        showTab($(e.target).attr('href'));

    });

    if (window.location.hash != "") {
        showTab(window.location.hash);
    } else {
        showTab(defaultTab);
    }

    $(document).ready(function () {
        setTimeout(setFooterY, 500);
    });
}
4

3 に答える 3

0

関数内で何かをアニメーション化する前に、関数内のlasttabandtab変数を確認する必要があると思います。showTab

showTab以下でマークされた変更を確認するために、以下のようにコードし//changedます。

function showTab(id) {
  id = id.replace("-tab", "");
  //window.location.hash = id;

  if (tab) {
    direction = (tab.attr('data-index') < $(id + "-tab").attr('data-index')) ? "rtl" : "ltr";
    lasttab = tab;
    lasttab.animate({
        'margin-left': (direction == "rtl") ? -0 - $(window).width() : -0 + $(window).width(),
        opacity: 1
    }, 1000, "easeInOutExpo", function () {
        $(this).hide();
    });

    if (tab.attr('id') == "team-tab") {
        $('#members-tab').animate({
            'margin-left': $(window).width(),
            opacity: 1
        }, 1000, "easeInOutExpo", function () {
            $(this).hide();
            $(this).unbind('click');
        });
    }
  }


  $('.nav').find('.current').removeClass('current');
  $('a[href="' + id + '"]').parent().addClass('current').prev().css('');

  tab = $(id + "-tab");
  if (lasttab !== tab) { //changed
    tab.css({
     'margin-left': (direction == "rtl") ? -0 + $(window).width() : -0 - $(window).width(),
     opacity: 1
     }).show().animate({
     'margin-left': 0,
     opacity: 1,
    }, 1000, "easeInOutExpo");
  }

  if (id == "#team") {
    $('#members-tab').css({
        'margin-left': $(window).width()
    }).show().animate({
        'margin-left': 0
    }, 1000, "easeInOutExpo").find('.tab').show();

  }

  setFooterY();
}

ところで(ちなみに)ここでjqueryスライダーをチェックしてください。すでにテストされているさまざまなブラウザーで応答性の高いスライダーが得られると非常に良いです。:D

アップデート

関数で定義されたコンテンツの高さが機能しないことを除いて、完全な動作例を以下で確認してくださいsetFooterY

    var tab, lasttab;
var defaultTab = '#profile-tab';
var direction = "rtl"; // Right To Left

$('.tab').hide();

function showTab(id) {
    id = id.replace("-tab", "");
    //window.location.hash = id;

    if (tab) {
        direction = (tab.attr('data-index') < $(id + "-tab").attr('data-index')) ? "rtl" : "ltr";
        lasttab = tab;
        lasttab.animate({
            'margin-left': (direction == "rtl") ? -0 - $(window).width() : -0 + $(window).width(),
            opacity: 1
        }, 1000, "easeInOutExpo", function () {
            $(this).hide();
        });

        if (tab.attr('id') == "team-tab") {
            $('#members-tab').animate({
                'margin-left': $(window).width(),
                opacity: 1
            }, 1000, "easeInOutExpo", function () {
                $(this).hide();
                $(this).unbind('click');
            });
        }
    }


    $('.nav').find('.current').removeClass('current');
    $('a[href="' + id + '"]').parent().addClass('current').prev().css('');

    tab = $(id + "-tab");
    tab.css({
        'margin-left': (direction == "rtl") ? -0 + $(window).width() : -0 - $(window).width(),
        opacity: 1
    }).show().animate({
        'margin-left': 0,
        opacity: 1,
    }, 1000, "easeInOutExpo");

    if (id == "#team") {
        $('#members-tab').css({
            'margin-left': $(window).width()
        }).show().animate({
            'margin-left': 0
        }, 1000, "easeInOutExpo").find('.tab').show();

    }

    setFooterY();
}

function setFooterY() {
    var h = tab.height() + 150 + 0;

    if (tab.attr('id') == "team-tab") {
        $('#members-tab').height($('#members-tab').find('.page').height() + 0);
        h += $('#members-tab').height() - 0;
    }

    $('#content').height(h);
    $('#vignettage').height(0 + h);
}

if ($('.nav').length > 0 && $('#news-page').length == 0) {
    $('.nav').on('click', 'a', function (e) {
        e.preventDefault();
        var clickedAnchor = $(e.target);
        if (!clickedAnchor.parent().hasClass('current')) {
            showTab(clickedAnchor.attr('href'));
        }

    });

    if (window.location.hash != "") {
        showTab(window.location.hash);
    } else {
        showTab(defaultTab);
    }

    $(document).ready(function () {
        setTimeout(setFooterY, 500);
    });
}
于 2013-04-19T06:21:47.460 に答える
0

表示したい div が既に表示されているかどうかの検証を追加し、アニメーション化しないでください。

...

if ($('.nav').length > 0 && $('#news-page').length == 0) {
    $('.nav').on('click', 'a', function (e) {
        e.preventDefault();
       if(!$(''+$(e.target).attr('href')+'-tab').is(':visible')){
        showTab($(e.target).attr('href'));
       }

});

...
于 2013-04-19T06:14:21.577 に答える