0

スクリプトファイルを短くするために、スクリプトファイルを数回書き直しました.2つの関数を除いて、かなり長くなります.

これらを1つに統合して機能させたい

最初に pageload 関数を使用すると、これはドキュメントの準備ができたときに初期化されます

function pageload(elements, settings) {
elements = $.extend({}, defaultelements, elements || {});
settings = $.extend({}, defaultsettings, settings || {});

if( settings.url === '' ) {
    console.log('No soup for you!');
    movePage.prototype.pagein();
} else {
    $.ajax({
        url: location,
        data: {
            json: 'get_page',
            slug: settings.url
        },
        success: function(data) {
            var html = '<article id="' + data.page.slug + '" data-info="' + data.page.slug + '" class="subpage"></article>';

            if(settings.motion) return false;
                else settings.motion = true;

            elements.thumbs.before(html);
            var container = $('.subpage');
            elements.body.prepend('<div class="spinner"></div>');
            $('.spinner').hide();
            container.load(data.page.url).hide();

            elements.thumbs.stop().animate({
                'top' : '100%'
            }, settings.speed, settings.easing, function() {
                $('.spinner').fadeIn(259);
                setTimeout(function() {
                    $('.spinner').fadeOut(559);
                    setTimeout(function() {
                        container.fadeIn(659);
                    }, 450)
                    setTimeout(function() {
                        $('.spinner').remove();
                    }, 200)
                }, 1250);
                settings.motion = false;
                movePage.prototype.pagein();
            });
        }
    });
}
}

そして、ナビゲーションjsonロードスクリプトがあります

function navigation(elements, settings) {
elements = $.extend({}, defaultelements, elements || {});
settings = $.extend({}, defaultsettings, settings || {});

elements.navitem.live('click', function(event) {
    event.preventDefault();

    $('.current-menu-item').removeClass('current-menu-item');
    $(this).parent().addClass('current-menu-item');

    settings.url = $(this).html();
    $.ajax({
        url: location,
        data: {
            json: 'get_page',
            slug: settings.url
        },
        success: function(data) {
            var current = $('.subpage');

            if( settings.url == 'work' ) {
                settings.motion = false;
            } else if( current.attr('id') == settings.url ) {
                settings.motion = false;
                return;
            } else {
                var html = '<article id="' + data.page.slug + '" data-info="' + data.page.slug + '" class="subpage"></article>';

                if(settings.motion) return false;
                    else settings.motion = true;

                elements.thumbs.before(html);
                var container = $('.subpage');
                elements.body.prepend('<div class="spinner"></div>');
                $('.spinner').hide();
                container.load(data.page.url).hide();

                elements.thumbs.stop().animate({
                    'top' : '100%'
                }, settings.speed, settings.easing, function() {
                    $('.spinner').fadeIn(259);
                    setTimeout(function() {
                        $('.spinner').fadeOut(559);
                        setTimeout(function() {
                            container.fadeIn(659);
                        }, 450)
                        setTimeout(function() {
                            $('.spinner').remove();
                        }, 200)
                    }, 1250);
                    settings.motion = false;
                    movePage.prototype.pagein();
                    $('article:not(#' + data.page.slug + ')').remove();
                });
            }
        }
    });
});
}

これらの関数を、ページロードとナビゲーション クリックの両方で呼び出すことができる関数にするソリューションを持っている人はいますか。

4

1 に答える 1

0

あなたの質問を正しく理解していれば... - 必要な関数呼び出しを含む単一の名前付き関数を定義します。- 2 つの追加の (非常に短い) 関数を作成します。

それがあなたにとって必要なものではない場合、それがあなたにとってうまくいかない原因は何ですか?

于 2012-11-20T14:27:15.730 に答える