首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Royal滑块与Picturefill.js

Royal滑块与Picturefill.js
EN

Stack Overflow用户
提问于 2013-06-27 09:24:41
回答 1查看 685关注 0票数 1

我正在创建一个有皇家滑翔机HTML版本的网站。我想使用图片填充加载为当前分辨率查看的图像优化。但我很难让它起作用。当我通过一个普通的WP_Query提供图像时,它可以工作。

我读过这篇线程,但这对我没有帮助,有谁想过吗?

谢谢,/Paul

代码语言:javascript
复制
<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

与开发商取得联系..。所以他给了一些建议。其中之一是在滑块之前确保图片重新初始化。他的意思是,至少我认为,picturefill.js需要在版税滑块文件之前加载。

但还是没有运气。欧恩在代码中做了一些小改动,因为:

代码语言:javascript
复制
<div class="rsIMG">

不遵循滑块语法。

EN

回答 1

Stack Overflow用户

发布于 2014-05-12 16:47:20

我今天设法让RoyalSlider与Picturefill2一起工作,但是您需要编辑picturefill.js文件的一个部分,以阻止它在调整窗口大小时重新计算。我刚刚在RoyalSlider论坛中输入了一些说明,但我也会在这里复制,以防它帮助其他人。

首先,您必须从picturefill.js的http://scottjehl.github.io/picturefill/#download抓取。然后在文档的HEAD中加载脚本文件,而不仅仅是在body标记之前。如果需要旧的浏览器支持,即不支持HTML5元素的浏览器,则需要按照这里的说明创建picture元素。或者,您可以在您的项目中包括现代派(我已经在使用现代化,所以我就是这样做的)。

RoyalSlider标记:下面是我使用的代码

代码语言:javascript
复制
     `<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网页上解释的,但基本上第一个<source>元素应该始终是您所要提供的图像的最高质量版本,并使用媒体查询来指定它何时应该加载。因此,在上面的示例中,在<768 is,GSA-01-最小的加载。如果设备像素比大于1,则加载gsa-01-smallest2x.jpg,直到最后如果设备像素比为1,则加载gsa-01-smallest.jpg。IE9包装器只是IE9支持的一个技巧。

现在,为了同时使用RoyalSlider和picturefill,您必须确保picturefill已经在页面中运行并在img标记中添加了正确的src属性,然后才让RoyalSlider执行它的操作。为了做到这一点,将您通常使用的jQuery(document).ready(function($) { $(".royalSlider").royalSlider({...代码放入一个名为defer.js的文件中。现在,就在文档的最后标记之前,但是显然在jQuery和Royalslider脚本标记之后,使用以下代码(称为脚本):

代码语言:javascript
复制
 `<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行左右):

代码语言:javascript
复制
     `if( w.addEventListener ){             var resizeThrottle;             w.addEventListener( "resize", function() {                 w.clearTimeout( resizeThrottle );                 resizeThrottle = w.setTimeout( function(){                     picturefill({ reevaluate: true });                 }, 60 );             }, false );         }` 

这就是我如何让它工作,这是一个奇妙的方式为手机提供滑块-特别是一个全宽度滑块。我不需要在3G手机上加载一个~400 on的全宽图像,我可以提供一个~80 on的图像代替:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17339404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档