1

Coda-Slider 2.0 (http://www.ndoherty.biz/tag/coda-slider/) を変更して、ハードコーディングされたピクセル幅ではなくパーセンテージ ベースの幅を使用して、流動的なサイズ変更を可能にしようとしています。パネル 1 に戻ろうとしたときの IE7 の小さな不具合 (Firefox はこの動作を示しません) を除いて、私はそれを素晴らしく動作させました。

coda-slider 2.0 に付属するデフォルトの index.html を実行すると、すべてが IE7 で正常に動作します。次に、デフォルトのテキストの代わりに画像をサブスクライブしますが、これも問題なく機能します。次に、パーセンテージ幅を使用するように CSS と JS を変更しました。これは、最初のパネルに戻ろうとする場合を除いて、うまく機能します。パネル 1 とパネル 2 の中間に即座にジャンプし、アニメーションでパネル 1 に戻ります。

これは、私が設定したテスト サイトで確認できます。

http://www.lootcorp.com/animateissue/

私が使用している変更された Coda-Slider JS ファイルのソースは以下のとおりです。注: デバッグを簡単にするために、不要なコードをすべて取り除きました。

問題は次の行に関連付けられています。

offset = - (panelWidth*z) + "%";

アニメーションが値として「0%」をフィードするのが気に入らないのではないかと思ったので、パネル 1 を選択したときに「0」と「0px」をフィードしてみましたが、結果は同じでした。最終結果は正しいです - 最終的に div は margin-left: 0 に適切に配置されますが、そうする前にパネル 1 と 2 の中間の位置にスキップする理由がわかりません。(パネル 4 から 3 または 2 へのアニメーションは正常に動作します)。「margin-left」の代わりに「left」を使用してみましたが、結果は同じでした。

バグまたは愚かな、見落とされた間違い?どんなアドバイスでも大歓迎です!!

js ファイル ソース:

    $(function(){
    // Remove the coda-slider-no-js class from the body
    $("body").removeClass("coda-slider-no-js");
    // Preloader
    $(".coda-slider").children('.panel').hide().end().prepend('<p class="loading">Loading...<br /><img src="images/ajax-loader.gif" alt="loading..." /></p>');
});

var sliderCount = 1;

$.fn.codaSlider = function(settings) {

    settings = $.extend({
        autoHeight: true,
        autoHeightEaseDuration: 1000,
        autoHeightEaseFunction: "easeInOutExpo",
        autoSlide: false,
        autoSlideInterval: 7000,
        autoSlideStopWhenClicked: true,
        crossLinking: true,
        dynamicArrows: true,
        dynamicArrowLeftText: "&#171; left",
        dynamicArrowRightText: "right &#187;",
        dynamicTabs: true,
        dynamicTabsAlign: "center",
        dynamicTabsPosition: "top",
        externalTriggerSelector: "a.xtrig",
        firstPanelToLoad: 1,
        panelTitleSelector: "h2.title",
        slideEaseDuration: 1000,
        slideEaseFunction: "easeInOutExpo"
    }, settings);

    return this.each(function(){


        var slider = $(this);


        var panelCount = slider.find(".panel").size();

        var panelWidth = 100;
        var panelContainerWidth = "400%";

        var navClicks = 0; // Used if autoSlideStopWhenClicked = true

        // Surround the collection of panel divs with a container div (wide enough for all panels to be lined up end-to-end)
        $('.panel', slider).wrapAll('<div class="panel-container"></div>');
        // Specify the width of the container div (wide enough for all panels to be lined up end-to-end)
        $(".panel-container", slider).css({ width: panelContainerWidth });

        // Specify the current panel.
        // If the loaded URL has a hash (cross-linking), we're going to use that hash to give the slider a specific starting position...
        if (settings.crossLinking && location.hash && parseInt(location.hash.slice(1)) <= panelCount) {
            var currentPanel = parseInt(location.hash.slice(1));
            var offset = - (panelWidth*(currentPanel - 1)) + "%";
            $('.panel-container', slider).css({ marginLeft: offset });
        // If that's not the case, check to see if we're supposed to load a panel other than Panel 1 initially...
        } else if (settings.firstPanelToLoad != 1 && settings.firstPanelToLoad <= panelCount) { 
            var currentPanel = settings.firstPanelToLoad;
            var offset = - (panelWidth*(currentPanel - 1)) + "%";
            $('.panel-container', slider).css({ marginLeft: offset });
        // Otherwise, we'll just set the current panel to 1...
        } else { 
            var currentPanel = 1;
        };



        // If we need a dynamic menu
           if (settings.dynamicTabs) {
            var dynamicTabs = '<div class="coda-nav" id="coda-nav-' + sliderCount + '"><ul></ul></div>';
            switch (settings.dynamicTabsPosition) {
                case "bottom":
                    slider.parent().append(dynamicTabs);
                    break;
                default:
                    slider.parent().prepend(dynamicTabs);
                    break;
            };
            ul = $('#coda-nav-' + sliderCount + ' ul');
            // Create the nav items
            $('.panel', slider).each(function(n) {
                ul.append('<li class="tab' + (n+1) + '"><a href="#' + (n+1) + '">' + $(this).find(settings.panelTitleSelector).text() + '</a></li>');                                               
            });
            navContainerWidth = slider.width() + slider.siblings('.coda-nav-left').width() + slider.siblings('.coda-nav-right').width();
            ul.parent().css({ width: navContainerWidth });
            switch (settings.dynamicTabsAlign) {
                case "center":
                    ul.css({ width: ($("li", ul).width() + 2) * panelCount });
                    break;
                case "right":
                    ul.css({ float: 'right' });
                    break;
            };
        };

        // If we need a tabbed nav
        $('#coda-nav-' + sliderCount + ' a').each(function(z) {
            // What happens when a nav link is clicked
            $(this).bind("click", function() {
                navClicks++;
                $(this).addClass('current').parents('ul').find('a').not($(this)).removeClass('current');
                if (z == 0) {
                    offset = "+0px";
                } else {
                    offset = - (panelWidth*z) + "%";
                }
                alert("Offset = " + offset);
        //      alterPanelHeight(z);
                currentPanel = z + 1;
                $('.panel-container', slider).animate({ marginLeft: offset }, settings.slideEaseDuration, settings.slideEaseFunction);
                if (!settings.crossLinking) { return false }; // Don't change the URL hash unless cross-linking is specified
            });
        });


        // Specify which tab is initially set to "current". Depends on if the loaded URL had a hash or not (cross-linking).
        if (settings.crossLinking && location.hash && parseInt(location.hash.slice(1)) <= panelCount) {
            $("#coda-nav-" + sliderCount + " a:eq(" + (location.hash.slice(1) - 1) + ")").addClass("current");
        // If there's no cross-linking, check to see if we're supposed to load a panel other than Panel 1 initially...
        } else if (settings.firstPanelToLoad != 1 && settings.firstPanelToLoad <= panelCount) {
            $("#coda-nav-" + sliderCount + " a:eq(" + (settings.firstPanelToLoad - 1) + ")").addClass("current");
        // Otherwise we must be loading Panel 1, so make the first tab the current one.
        } else {
            $("#coda-nav-" + sliderCount + " a:eq(0)").addClass("current");
        };


        // Kill the preloader
        $('.panel', slider).show().end().find("p.loading").remove();
        slider.removeClass("preload");

        sliderCount++;

    });
};
4

1 に答える 1

4

2 年以上前の jQuery 1.3.2 を使用している理由はありますか? 5 年も経っていない図書館の場合、これはかなりの量です。

1.5.1 である jQuery の現在の安定版を使用して同じ問題がありますか?

IE が標準モードと最新のレンダリング エンジンを使用してページをレンダリングしていることを確認してください。

次のメタ タグを使用します。

<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

jQuery の最新の安定バージョンを使用しても同じ問題が発生するかどうかを確認してください。バージョン 1.3 から大幅に変更されました。

于 2011-03-10T22:05:15.363 に答える