質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.60%

ページ遷移後にjQueryを実行したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,730

score 15

前提・実現したいこと

jQueryの「mixitup」というプラグインを使って、ギャラリーページをつくっております。このギャラリーページではmixitupのフィルター機能を使って、アイテムの出し分けを行います。

アイテムは「a」「b」「c」の3種類があり、掲載しているギャラリーページをAとします。
別ページのBにある「c」リンクをクリックすると、Aページに移動して「c」アイテムのみが表示されるところまでは実現できました。

ただ、私の理想では、
1.Aページに移動
2.一旦はすべてのアイテムが表示される
3.アニメーションでcアイテムのみが表示される。
(アニメーションはmixitupの機能です。)

という動作にしたく、そのためにはjQueryがページ遷移後に実行されればよいと考えましたが、下記コードでは移動するとすぐにcアイテムだけが表示されます。


試行錯誤したのですが、理解不足でどうにもうまくいかず相談させていただきます。
アドバイスいただけましたら幸いです。よろしくお願いいたします。

【追記】
アドバイスいただきました通り、当該HTMLを加えました。簡略化しておりますが、こういった具合です。また、記載したjQueryはHTMLの下部で読み込んでおります「mixitup_option.js」というファイルです。
引き続きどうぞよろしくお願いいたします。

【さらに追記】
Bページの「a」「b」「c」へのリンク部分のHTMLを記載しておりませんでしたので、改めて追記しました。

該当のソースコード

↓mixitup_option.js

$(window).on('load', function(){

    var containerEl = document.querySelector('#gallery');

    if(document.URL.match("#a")){
        // URLにaが含まれる時
        $(function(){
            var mixer = mixitup(containerEl, {
                load: {
                    filter: '.a'
                }
            });
        });

    } else if(document.URL.match("#b")) {
        // URLにbが含まれる時
        $(function(){
            var mixer = mixitup(containerEl, {
                load: {
                    filter: '.b'
                }
            });
        });

    } else if(document.URL.match("#c")) {
        // URLにcが含まれる時
        $(function(){
            var mixer = mixitup(containerEl, {
                load: {
                    filter: '.c'
                }
            });
        });
    } else {
        $(function(){
            var mixer = mixitup(containerEl, {
                "animation": {
                    "duration": 250,
                    "nudge": true,
                    "reverseOut": false,
                    "effects": "fade scale(0.5) translateZ(-100px)"
                }
            });
        });
    }

});

↓AページHTML

<html dir="ltr" lang="ja">
<head>
<meta charset="UTF-8">
<title>無題ドキュメント</title>
<link rel="stylesheet" href="../css/reset.css" type="text/css" />
<link rel="stylesheet" href="../css/style.css" type="text/css" />
</head>
<body>
    <div class="wrapper">
        <section id="category">
            <div id="gallery">
                <div class="mix a">a</div>
                <div class="mix b">b</div>
                <div class="mix c">c</div>
                <div class="mix a">a</div>
                <div class="mix b">b</div>
                <div class="mix c">c</div>
            </div>
        </section>
    </div>
</body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="../js/mixitup.js"></script>
<script src="../js/mixitup_option.js"></script>
</html>

↓Bページの「a」「b」「c」へのリンク部分

<nav>
    <ul class="menu">
        <li><a href="../A.html">A</a></li>
        <ul>
            <li><a href="../A.html#a">a</a></li>
            <li><a href="../A.html#b">b</a></li>
            <li><a href="../A.html#c">c</a></li>
        </ul>
        <li><a href="#">B</a></li>
        <li><a href="#">C</a></li>
    </ul>
</nav>

補足情報(FW/ツールのバージョンなど)

利用しているjQueryのバージョンは1.10.2です。
また、プラグインmixitupのサイトはこちらです。
https://www.kunkalabs.com/mixitup/

【最終追記】

どなたかのお役に立つことがあるかもしれないので、修正後のjQueryを記載しておきます。

$(function(){

    $(window).on('load', function(){

        var containerEl = document.querySelector('#gallery'),
            mixer = mixitup(containerEl);

        if(document.URL.match("#a")){
            // URLにaが含まれる時
            $(function(){
                mixer;
                mixer.filter('.a');
            });

        } else if(document.URL.match("#b")) {
            // URLにbが含まれる時
            $(function(){
                mixer;
                mixer.filter('.b');
            });

        } else if(document.URL.match("#c")) {
            // URLにcが含まれる時
            $(function(){
                mixer;
                mixer.filter('.c');
            });

        } else {
            $(function(){
                mixer;
            });
        }
    });

});
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • miyabi_takatsuk

    2019/03/10 23:31

    まず、記載いただいている、コードが、どのページのものなのでしょうか?
    また、A、B、Cページの該当する箇所でいいので、HTMLコードを記載いただいた方が、回答を得られやすいかと思います。

    キャンセル

  • atsushi_m

    2019/03/11 00:07

    miyabi_takatsuk様、アドバイスいただきありがとうございます。ご指摘の通りHTMLを記載させていただきました。
    現在、別の方にいただいたご回答を試行しておりますが、なにかお気付きのことがございましたら引き続きどうぞよろしくお願いいたします。

    キャンセル

回答 1

checkベストアンサー

+1

$(function(){}) は $(window).on('load', function(){}) より前のタイミングのイベントで使われます。そのイベント以降であれば、他のイベントを待つことなく実行されます。

なので、とりあえず下記のようになります。ただ、少し待ってからfilterをかけるように待つほうが良いでしょう。

$(function(){
    $(window).on('load', function(){/*ここで分岐*/})
})

【API Methods – MixItUp Docs | KunkaLabs】
https://www.kunkalabs.com/mixitup/docs/api-methods/#mixitup.Mixer.filter

【WindowOrWorkerGlobalScope.setTimeout() - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/WindowTimers/setTimeout

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/11 00:04

    kei344様、以前にもご回答いただいたことがございますね。この度も早々にご回答いただきありがとうございます。
    勉強不足でいただいた回答を理解・試行するのに少し時間が必要なため、取り急ぎお礼と報告を申し上げます。また、進行しましたらこちらで連絡させていただきます。

    キャンセル

  • 2019/03/11 01:27

    夜分に失礼いたします。
    おかげさまで解決できました!アドバイスいただいたとおりAPI(.filter)を利用してうまくいきました。(因みに.setTimeoutで待機時間をつくらなくても大丈夫でした。)
    希望通りの動作になりホッとしました、本当にありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る