0

いくつかのセクションがあり、各セクションに異なる IDを持つコンテンツ ラッパーがあります。セクションには、 translate3dを使用して水平方向にセクション間を移動する変換操作をトリガーするメニュー ナビゲーションを使用してアクセスできます。activeという名前のクラスを使用して、表示するセクションを示します。コンテンツ ラッパーに向かって絶対的な位置に 2 つのアンカーを配置しました。スライドショーの矢印のようなもので、1 つは左側に、もう 1 つは右側に配置しました。

コードは次のようになります

    <div id="wrapper">
        <a class="left-arrow" href="#"></a>
        <a class="right-arrow" href="#"></a>

        <header>
            <nav id="main">
                <a class="active" href="#!/one">one</a>
                <a href="#!/two">two</a>
                <a href="#!/three">three</a>
                <a href="#!/four">four</a>
            </nav>
        </header>
        <div class="content_wrapper" style="display: block; transform: translate3d(0px, 0px, 0px);">
            <section id="one" class="active">content one</section>
            <section id="two">content two</section>
            <section id="three">content three</section>
            <section id="four">content four</section>
        </div>
    </div>

CSS

    .left-arrow{ background: url('../img/left-arrow.png') left top no-repeat; height: 64px; width: 16px; display: block; position: absolute; top: 180px; left: 0; z-index: 10;}
    .right-arrow{ background: url('../img/right-arrow.png') right top no-repeat; height: 64px; width: 16px; display: block; position: absolute; top: 180px; right: 0; z-index: 10;}

私の問題は、最初のセクションにクラスactiveがあるときに矢印を非表示にする方法と、最後のセクションにクラスactiveがあるときに矢印を非表示にする方法がわからないことです。onchangeを試してみましたが、明らかに失敗しました。私は jQuery 要素とイベント操作の新人です。どのセレクターとどのイベントを使用すればよいですか? 誰かが私に道順を教えてもらえますか?

ここにjQueryの部分があります

    (function (e) {

        var r = !1;
        e(window).on("hashchange", function (i) {
            var s = e("section#" + document.location.hash.replace("#!/", ""));
            if (!r && !s.hasClass("active")) {
                r = !0;
                e('nav#main a[href="' + document.location.hash + '"]').addClass("active").siblings().removeClass("active");
                e("section.active").animate({
                    scrollTop: 0
                }, 300);
                e("section.active").children("footer").children("div.box").hide();
                s.addClass("active").siblings().removeClass("active");
                if (Modernizr.csstransitions && Modernizr.csstransforms3d) e("div.content_wrapper").transition({
                    transform: "translate3d(-" + 1e3 * s.index() + "px, 0, 0)"
                }, {
                    duration: 800,
                    easing: "cubic-bezier(0.770, 0.000, 0.175, 1.000)"
                }, function () {
                    r = !1
                });
                else {
                    e("div.content_wrapper").animate({
                        left: "-" + 1e3 * s.index() + "px"
                    }, {
                        duration: 800,
                        queue: !0
                    });
                    r = !1
                }
            }
        });

    })
4

2 に答える 2

0

すべてのセクションにクラスを追加して、追加または削除できるようにし、最初/最後である特定の ID に集中する必要がないようにします

<section id="one" class="content active">content one</section>
function setArrowState(){
    var $content=$('.content');
    $('.left-arrow')[ $content.first().is('.active') ? 'hide' :'show' ]();
     $('.right-arrow')[ $content.last().is('.active') ? 'hide' :'show' ]();
}

$(function(){
    /* set arrows on page load*/
    setArrowState();
});

EDIT:示されているhaschangeコードでは、 setArrowState() 後にオンラインで呼び出します.addClass("active").siblings().removeClass("active");

于 2013-11-06T13:33:06.737 に答える
-1

どの要素が選択されているかを変数に認識させる必要があるだけなので、クラスを削除してから、クリックイベントを設定してクラスを追加できます。

var menu1 = document.querySelector('#main1');
var menu2 = document.querySelector('#main2');
    // etc

var selected = menu1;

var activeClass = function()
    {
    $(selected).removeClass('active');

    $(this).addClass('active');

    selected = this;
    };


menu1.onclick = activeClass;
menu2.onclick = activeClass;
于 2013-11-06T13:29:46.700 に答える