0

私はtumblrのこのコードを持っていますが、.html_photoset関数が発生しているときに、.onkeyup関数が発生しないようにしたいと思います。これは、両方の関数が矢印キーを使用しているためです。最初のスクリプトがオンのときに発生しないように、2番目のスクリプトにifを追加するにはどうすればよいですか?

{block:Photoset}
     {block:PermalinkPage} 

        <script type="text/javascript">
            $(document).ready(function() {
                $('.html_photoset').killPhotoset({
                    photoSize: 500
                });
            });
        </script>               

        <!-- [...] -->

        {block:PermalinkPagination} 

            <div class="permpaginate">

                {block:NextPost}
                    <a href="{NextPost}" id="prevp">Previous Project</a>
                {/block:NextPost}
                {block:PreviousPost}
                    <a href="{PreviousPost}" id="nextp">Next Project</a>
                {/block:PreviousPost}

            </div>

        {/block:PermalinkPagination}

        <script type="text/javascript">
            window.onload = function () {
                document.onkeyup = function(event) {
                    var e = (!event) ? window.event : event;
                    switch (e.keyCode) {
                        case 37:
                            window.location.href = document.getElementById('prevp').href;
                            break;
                        case 39:
                            window.location.href = document.getElementById('nextp').href;
                            break;
                    }
                };
            };
        </script>

    {/block:PermalinkPage}

{/block:Photoset}
4

2 に答える 2

1

これにアプローチする方法はいくつかあります。

  1. html_photoset が発生しているときにグローバル フラグを設定してから、他の onkeyup ハンドラでグローバル フラグをチェックし、html_photoset がアクティブな場合は何もしません。html_photoset が非アクティブになると、フラグをクリアして、他のキーアップ ハンドラーが機能し始めるようにします。

  2. また、onkeyup ハンドラーをアンインストールして、適切なタイミングで再インストールすることもできます。

  3. html_photoset ハンドラーでイベントの伝播を停止しe.stopPropagation()て、html_photoset でイベントを処理したときに、他の keyup ハンドラーがあるドキュメント レベルまで伝播しないようにすることができます。

最もクリーンなのはおそらくオプション 3 です。

于 2013-02-25T15:18:31.047 に答える
0

おそらく、Tumblr Javascript API にアクセスする必要があります。どうやら利用可能ですが、ログインしている場合のみ:

tumblr ブログとウェブサイトの統合

そのため、残念ながらこれ以上詳細にアクセスすることはできません。

ここで使用しているイベント呼び出しは一部のブラウザーでしか機能しないため、一般的に言えば、おそらく jquery などのライブラリを使用してイベント コードを抽象化する必要があります。理想的には、これを行うために tumblr 自体が既に使用しているイベント ライブラリを活用することをお勧めします。特に、それらがどのように結びついているかに応じて、その onkeydown/onkeypress/onkeyup イベントに介入する必要があるためです。

戦略は次のとおりです。

  1. これに応答するためにTumblrが使用しているイベントを特定します。
  2. イベント ハンドラーを削除する
  3. 独自のコピーを追加し直し、矢印キーが押されたときに、これを変更したいコンテキストに基づいて、コードまたはTumblrを起動するかどうかを決定します(質問からは明確ではありませんが、たとえばに依存する場合がありますどのタグがイベントを開始したか、どのタグがフォーカスを持っているかなど)。
于 2013-02-25T15:26:48.980 に答える