1

Royal Slider HTML バージョンの Web サイトを作成しています。現在表示されている解像度に合わせて最適化された画像を読み込むために、picturefillを使用したいと考えています。しかし、私はそれを機能させるのに問題があります。通常の WP_Query を介して画像を提供している間は機能します。

私はこのスレッドを読みましたが、それは私を助けませんでした。

ありがとう、/ポール

<div id="featuredAdv" class="royalSliderAdv rsMinW">

    <?php 

        $args_featured_adv = array(
            'posts_per_page' => -1,
            'orderby' => 'rand',
            'post_type' => 'advertenties',
            'meta_key' => 'advertentiepositie',
            'meta_value' => 'Featured'
        );

        $adv_featured = new WP_Query( $args_featured_adv );

        if( $adv_featured->have_posts() ): while ( $adv_featured->have_posts() ) : $adv_featured->the_post();

    ?>

    <a href="<?php the_field('link'); ?>" target="_blank" onClick="return recordOutboundLink(this, ['<?php the_title(); ?>', '<?php the_field('link'); ?>']);">

        <div class="rsContent">

                <?php

                    $attachment_id_ft = get_field('afbeelding');
                    $small_ft = wp_get_attachment_image_src( $attachment_id_ft, 'adv-b-small-small' ); // returns an array
                    $default_ft = wp_get_attachment_image_src( $attachment_id_ft, 'adv-b-small-default' ); // returns an array
                    $large_ft = wp_get_attachment_image_src( $attachment_id_ft, 'adv-b-small-large' ); // returns an array

                ?>

                <span data-picture data-alt="<?php the_title_attribute( array( 'before' => 'Photoq.nl: ', 'after' => '' ) ); ?>">
                    <span data-src="<?php echo $default_ft[0]; ?>"></span>
                    <span data-src="<?php echo $small_ft[0]; ?>" data-media="(min-width: 400px)"></span>
                    <span data-src="<?php echo $default_ft[0]; ?>" data-media="(min-width: 768px)"></span>
                    <span data-src="<?php echo $large_ft[0]; ?>" data-media="(min-width: 1200px)"></span>

                    <!-- Fallback content for non-JS browsers. Same img src as the initial, unqualified source element. -->
                    <noscript>
                        <img src="<?php echo $default_ft[0]; ?>" alt="">
                    </noscript>
                </span>

        </div>

    </a>

    <?php endwhile; endif; wp_reset_query(); ?>

</div> <!-- end #featuredAdv -->

<script>
    jQuery(document).ready(function($) {
        $('#featuredAdv').royalSlider({
            arrowsNav: false,
            loop: false,
            controlsInside: false,
            imageScaleMode: 'none',
            imageScalePadding: 0,
            arrowsNavAutoHide: false,
            autoScaleSlider: true,
            autoScaleSliderWidth: 270,
            autoScaleSliderHeight: 572,
            controlNavigation: 'bullets',
            numImagesToPreload: 1,
            thumbsFitInViewport: false,
            navigateByClick: true,
            startSlideId: 0,
            autoPlay: false,
            transitionType: 'move',
            globalCaption: true
        });
    });
</script>

編集: 28-06 09:40

開発者と連絡を取りました...それで彼はいくつかのヒントをくれました。それらの 1 つは、スライダーの前に、picturefill が確実に初期化されるようにすることでした。つまり、少なくとも私が思うに、royalslider ファイルの前に picturefill.js をロードする必要があるということです。

それでも運はありません。Oh en により、コードが少し変更されました。

<div class="rsIMG">

スライダーの構文に従いません。

4

1 に答える 1

1

今日、RoyalSlider を Picturefill2 で動作させることができましたが、picturefill.js ファイルのセクションを編集して、ウィンドウのサイズ変更時に再計算されないようにする必要があります。RoyalSliderフォーラムにいくつかの指示を入力しましたが、他の人の助けになる場合に備えてここにもコピーします.

まず、 http: //scottjehl.github.io/picturefill/#download から picturefill.js を取得する必要があります。次に、 body タグの直前ではなく、ドキュメントのHEADにスクリプト ファイルをロードします。古いブラウザーのサポートが必要な場合、つまり HTML5 要素をサポートしていないブラウザーが必要な場合は、こちらの手順に従って要素を作成する必要がありpictureます。または、プロジェクトに Modernizr を含めることもできます (私は既に modernizr を使用していたので、そのようにしました)。

RoyalSlider マークアップ: これが私が使用したコードです

<div class="royalSlider rsDefault"> <picture> <!--[if IE 9]><video style="display: none;"><![endif]--> <source srcset="img/gsa-01.jpg" media="(min-width: 768px)"> <source srcset="img/gsa-01-smallest.jpg, img/gsa-01-smallest@2x.jpg 2x"> <!--[if IE 9]></video><![endif]--> <img class="rsImg" srcset="img/gsa-01-smallest.jpg, img/gsa-01-smallest2x.jpg 2x" alt="GSA Est. 1935"> </picture> <!-- etc... --> </div>

最初は少し混乱しているように見えますが、非常に理解しやすく、picturefill Web ページですべて説明されていますが、基本的に最初の<source>要素は常に、提供するためにパンする画像の最高品質のバージョンであり、ロードする必要がある場合。上記の例では < 768px で、gsa-01-smallest が読み込まれます。デバイスのデバイス ピクセル比が 1 より大きい場合、gsa-01-smallest2x.jpg がロードされ、最終的にデバイス ピクセル比が 1 の場合、gsa-01-smallest.jpg がロードされます。IE9 ラッパーは、IE9 をサポートするための単なるトリックです。

ここで、RoyalSlider と picturefill を一緒に使用するには、srcRoyalSlider に実行させる前に、picturefill がページ全体を通過し、img タグに正しい属性が追加されていることを確認する必要があります。これを行うには、royalslider( jQuery(document).ready(function($) { $(".royalSlider").royalSlider({...) の通常のコードを というファイルに配置しますdefer.js。ここで、ドキュメントの最終タグの直前、ただし明らかに jQuery および Royalslider js スクリプト タグの後に、次のコードを使用します (Google Defer js スクリプトとして知られています)。

<script type="text/javascript"> function downloadJSAtOnload() { var element = document.createElement("script"); element.src = "js/defer.js"; document.body.appendChild(element); } if (window.addEventListener) window.addEventListener("load", downloadJSAtOnload, false); else if (window.attachEvent) window.attachEvent("onload", downloadJSAtOnload); else window.onload = downloadJSAtOnload; </script>

これは、ページが他のすべてをロードするまで待ってから、そのスクリプト ( js/defer.jsからロード) を適用することを示しています。

これは、ウィンドウのサイズを変更するとすべてが壊れる (FML!) ことに気付くまでは、非常にうまく機能します。これは、picturefill には、ウィンドウのサイズが変更されるたびに画像を再度入れ替えるコードのセクションが含まれているためです。これは、RoyalSlider ではまったくうまく機能しません。したがって、これを停止するには、picturefill.js を開き、次のコード ブロックを見つけてコメント アウトします (250 行目あたり)。

if( w.addEventListener ){ var resizeThrottle; w.addEventListener( "resize", function() { w.clearTimeout( resizeThrottle ); resizeThrottle = w.setTimeout( function(){ picturefill({ reevaluate: true }); }, 60 ); }, false ); }

これが私がそれを機能させる方法であり、スライダーを携帯電話に提供する素晴らしい方法です-特に全幅スライダー。3G 携帯電話に ~400kb の全幅の画像をロードする必要はありません。代わりに ~80kb の画像を提供できます:)

于 2014-05-12T16:47:20.887 に答える