【问题标题】:Use different js rules based on screen size根据屏幕大小使用不同的js规则
【发布时间】:2017-04-05 13:20:14
【问题描述】:

您好,我想使用这个slider,但我有一个问题。

我的目标是在我的屏幕最小宽度为 768 像素时仅显示我的 8 张图像中的 .web 类 图像,并且仅显示我的 8 幅图像中的 .phone 类 图像当我的屏幕具有最大宽度时的 8 张图像:768px。

所以当我们看到 4 张图片时,我们会回到第一张。

使用我的 css 技术,我可以从图像 5 到 8 看到白色背景,而不是从 1 到 4 看到背景图像

@media only screen and (min-width: 768px) {
li.web { display: block; }
li.phone { display: none; }
}

@media only screen and (max-width: 768px) {
li.web { display: none; }
li.phone { display: block; }
}
<ul id="cbp-bislideshow" class="cbp-bislideshow">
  <li class="web"> <img src="https://placehold.it/250x250" alt="image01" /></li>
  <li class="web"> <img src="https://placehold.it/250x250" alt="image02" /></li>
  <li class="web"> <img src="https://placehold.it/250x250" alt="image03" /></li>
  <li class="web"> <img src="https://placehold.it/250x250" alt="image04" /></li>
  <li class="phone"><img src="https://placehold.it/150x150" alt="image05" /></li>
  <li class="phone"><img src="https://placehold.it/150x150" alt="image06" /></li>
  <li class="phone"><img src="https://placehold.it/150x150" alt="image07" /></li>
  <li class="phone"><img src="https://placehold.it/150x150" alt="image08" /></li>
</ul>

谢谢

更新

我修改了我的 HTML、JS 和 CSS 部分,但它不起作用,这是我的修改:

CSS

/* Slider */

.cbp-bislideshow.web, 
.cbp-bislideshow.phone
{ list-style: none; width: 100%; height: 100%; position: fixed; top: 0; left: 0; z-index: -1; padding: 0; margin: 0; }

.cbp-bislideshow.web li,
.cbp-bislideshow.phone li
{ position: absolute; width: 101%; height: 101%; top: -0.5%; left: -0.5%; opacity: 0; -webkit-transition: opacity 1s; -moz-transition: opacity 1s; transition: opacity 1s; }


.backgroundsize .cbp-bislideshow.web li,
.backgroundsize .cbp-bislideshow.phone li
{ -webkit-background-size: cover; -moz-background-size: cover; background-size: cover; background-position: center center; }

.backgroundsize.cbp-bislideshow.web li img,
.backgroundsize.cbp-bislideshow.phone li img,
{ display: block; }

.cbp-bislideshow.web li img,
.cbp-bislideshow.phone li img
{ display: none; width: 100%; }

.no-js.no-backgroundsize .cbp-bislideshow.web li:first-child,
.no-js.no-backgroundsize .cbp-bislideshow.phone li:first-child
{ opacity: 1; }

.no-js.backgroundsize .cbp-bislideshow.web li:first-child img,
.no-js.backgroundsize .cbp-bislideshow.phone li:first-child img
{ display: block; }

@media only screen and (min-width: 768px) { .cbp-bislideshow.web   { display:block; } .cbp-bislideshow.phone { display:none; } }

@media only screen and (max-width: 768px) { .cbp-bislideshow.web   { display:none; } .cbp-bislideshow.phone { display:block; } }

JS

 var cbpBGSlideshow=(function(){var l=$("#cbp-bislideshow-web, #cbp-bislideshow-phone"),g=l.children("li"),n=g.length,f=$("#cbp-bicontrols"),c={$navPrev:f.find("span.cbp-biprev"),$navNext:f.find("span.cbp-binext"),$navPlayPause:f.find("span.cbp-bipause")},h=0,e,k=true,b=3500;function m(o){l.imagesLoaded(function(){if(Modernizr.backgroundsize){g.each(function(){var p=$(this);p.css("background-image","url("+p.find("img").attr("src")+")")})}else{l.find("img").show()}g.eq(h).css("opacity",1);j();a()})}function j(){c.$navPlayPause.on("click",function(){var o=$(this);if(o.hasClass("cbp-biplay")){o.removeClass("cbp-biplay").addClass("cbp-bipause");a()}else{o.removeClass("cbp-bipause").addClass("cbp-biplay");i()}});c.$navPrev.on("click",function(){d("prev");if(k){a()}});c.$navNext.on("click",function(){d("next");if(k){a()}})}function d(q){var p=g.eq(h);if(q==="next"){h=h<n-1?++h:0}else{if(q==="prev"){h=h>0?--h:n-1}}var o=g.eq(h);p.css("opacity",0);o.css("opacity",1)}function a(){k=true;clearTimeout(e);e=setTimeout(function(){d("next");a()},b)}function i(){k=false;clearTimeout(e)}return{init:m}})();

HTML

<div class="container">


<div class="main">
<ul id="cbp-bislideshow-web" class="cbp-bislideshow web">
<li><img src="index/img/1.jpg" alt="image01"/></li>
<li><img src="index/img/2.jpg" alt="image02"/></li>
<li><img src="index/img/3.jpg" alt="image03"/></li>
<li><img src="index/img/4.jpg" alt="image04"/></li>
</ul>

<ul id="cbp-bislideshow-phone" class="cbp-bislideshow phone">
<li><img src="index/img/5.jpg" alt="image05"/></li>
<li><img src="index/img/6.jpg" alt="image06"/></li>
<li><img src="index/img/7.jpg" alt="image07"/></li>
<li><img src="index/img/8.jpg" alt="image08"/></li>
</ul>  

<div id="cbp-bicontrols" class="cbp-bicontrols">
<span class="cbp-binext"></span>
</div>

</div>



</div>

<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.4.min.js"></script>

<script src="index/js/jquery.imagesloaded.min.js"></script>

<script src="index/js/cbpBGSlideshow.min.js"></script>

<script>$(function() { cbpBGSlideshow.init(); });</script>

【问题讨论】:

  • ul 上有 CSS 吗? display none 不应该留下空白。我的猜测是幻灯片在加载时正在计算所有图像的宽度。当你改变它时,你可能需要让它重新计算。在不了解更多细节的情况下,不可能真正为您提供更多帮助。
  • 构建两个完全独立的滑块,隐藏其中一个而不是隐藏单个图像。
  • 我试图复制滑块并一个一个隐藏,但没有运气,也许我做错了?
  • @fatyfatoumata 我将您的代码移到了 sn-p 中,以便您可以演示该问题。我将图像替换为链接图像,以便您查看结果。看起来它正在做预期的事情。您可以全屏显示 sn-p 并更改宽度以触发 CSS。
  • 一些滑块插件无法在一页上加载两个滑块,因为它们使用相同的 ID。

标签: javascript jquery html css responsive-design


【解决方案1】:

大多数滑块会在加载时呈现其内容,之后不会更改。所以当你用 css 隐藏它们时,你不会有一个有 4 个图像的滑块。

我建议使用 2 个滑块。一个用于手机,一个用于网络:

<ul id="cbp-bislideshow-web" class="cbp-bislideshow web">
 <li>  <img src="index/img/1.jpg" alt="image01"/></li>
 <li>  <img src="index/img/2.jpg" alt="image02"/></li>
 <li>  <img src="index/img/3.jpg" alt="image03"/></li>
 <li>  <img src="index/img/4.jpg" alt="image04"/></li>
</ul>

<ul id="cbp-bislideshow-phone" class="cbp-bislideshow phone">
 <li>  <img src="index/img/1.jpg" alt="image01"/></li>
 <li>  <img src="index/img/2.jpg" alt="image02"/></li>
 <li>  <img src="index/img/3.jpg" alt="image03"/></li>
 <li>  <img src="index/img/4.jpg" alt="image04"/></li>
</ul> 

@media only screen and (min-width: 768px) {
 .cbp-bislideshow.web   { display:block; }
 .cbp-bislideshow.phone { display:none; }
}


@media only screen and (max-width: 768px) {
 .cbp-bislideshow.web   { display:none; }
 .cbp-bislideshow.phone { display:block; }  
}

编辑: 您的插件没有循环通过滑块元素 (l = $("#cbp-bislideshow-web, #cbp-bislideshow-phone") = 2 个元素) (l.imagesLoaded(function () { = 初始化一个滑块的函数) 并且只创建一个滑块。

我认为有两种解决方案: 1.更改一页上多个滑块的滑块代码 2. 在一个页面上寻找另一个支持多个滑块的滑块

【讨论】:

    【解决方案2】:

    尝试构建两个不同的滑块:

    @media only screen and (min-width: 768px) {
    .web   { display:block; }
    .phone { display:none; }
    }
    
    
    @media only screen and (max-width: 768px) {
    .web   { display:none; }
    .phone { display:block; }  
    }
    <ul id="cbp-bislideshow-web" class="cbp-bislideshow web">
    <li class="">  <img src="index/img/1.jpg" alt="image01"/></li>
    <li class="">  <img src="index/img/2.jpg" alt="image02"/></li>
    <li class="">  <img src="index/img/3.jpg" alt="image03"/></li>
    <li class="">  <img src="index/img/4.jpg" alt="image04"/></li>
    </ul>
    
    <ul id="cbp-bislideshow-phone" class="cbp-bislideshow phone">
    <li class=""><img src="index/img/5.jpg" alt="image05"/></li>
    <li class=""><img src="index/img/6.jpg" alt="image06"/></li>
    <li class=""><img src="index/img/7.jpg" alt="image07"/></li>
    <li class=""><img src="index/img/8.jpg" alt="image08"/></li>
    </ul>

    【讨论】:

    • @Blazemonger 我做到了,但它对我不起作用,你能在最后阅读我的更新问题并告诉我是否做错了什么
    • 真正的问题是我们没有插件代码,所以当你调用它时我们无法解决问题。
    • 你想要什么,页面链接,jsfiddle 或者我可以复制所有代码,如果你愿意?我更新了我的问题并添加了滑块的所有 html、css 和 jscode,希望它可以提供帮助,并且问题可能来自这一行
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 2013-10-26
    • 2017-06-13
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多