幻灯片处于活动状态时更改标签的颜色

Posted

技术标签:

【中文标题】幻灯片处于活动状态时更改标签的颜色【英文标题】:Change color of label when slide is active 【发布时间】:2021-10-10 18:39:04 【问题描述】:

有人可以帮助我吗 我正在尝试更改文本活动幻灯片的颜色。

因此,如果幻灯片 1 处于活动状态,则屏幕底部的“幻灯片 1”文本应变为黄色,而其他 2 则保持白色。

如果幻灯片 2 处于活动状态,“幻灯片 2”应该变成黄色 enz。

我使用的代码是:“https://codepen.io/omairatiq/pen/wvBoGaE

$(document).ready(function()
    

    $(".slider").slick(
    infinite: true,
    arrows: false,
    dots: false,
    autoplay: false,
    speed: 800,
    slidesToShow: 1,
    slidesToScroll: 1,
    );

    //ticking machine
    var percentTime;
    var tick;
    var time = 1;
    var progressBarIndex = 0;

    $('.progressBarContainer .progressBar').each(function(index) 
        var progress = "<div class='inProgress inProgress" + index + "'></div>";
        $(this).html(progress);
    );

    function startProgressbar() 
        resetProgressbar();
        percentTime = 0;
        tick = setInterval(interval, 10);
    

    function interval() 
        if (($('.slider .slick-track div[data-slick-index="' + progressBarIndex + '"]').attr("aria-hidden")) === "true") 
            progressBarIndex = $('.slider .slick-track div[aria-hidden="false"]').data("slickIndex");
            startProgressbar();
         else 
            percentTime += 1 / (time + 5);
            $('.inProgress' + progressBarIndex).css(
                width: percentTime + "%"
            );
            if (percentTime >= 100) 
                $('.single-item').slick('slickNext');
                progressBarIndex++;
                if (progressBarIndex > 2) 
                    progressBarIndex = 0;
                
                startProgressbar();
            
        
    

    function resetProgressbar() 
        $('.inProgress').css(
            width: 0 + '%'
        );
        clearInterval(tick);
    
    startProgressbar();
    // End ticking machine

    $('.progressBarContainer div').click(function () 
        clearInterval(tick);
        var goToThisIndex = $(this).find("span").data("slickIndex");
        $('.single-item').slick('slickGoTo', goToThisIndex, false);
        startProgressbar();
    );
    
        
);
h3 
  margin:5px 0; 
  color: black;


.sliderContainer 
  position: relative;


.slider 
  width: 500px;
  margin: 30px 50px 50px;


.slick-slide 
  background: #3a8999;
  color: white;
  padding: 80px 0 120px;
  font-size: 30px;
  font-family: "Arial", "Helvetica";
  text-align: center;


.slick-prev:before,
.slick-next:before 
  color: black;


.slick-dots 
  bottom: -30px;


.slick-slide:nth-child(odd) 
  background: #e84a69;


.progressBarContainer 
  position: absolute;
  bottom: 20px;
  width:300px;
  left:150px;


.progressBarContainer div 
  display: block;
  width: 30%;
  padding: 0;
  cursor: pointer;
  margin-right: 5%;
  float: left;
  color: white;


.progressBarContainer div:last-child 
  margin-right: 0;


.progressBarContainer div span.progressBar 
  width: 100%;
  height: 4px;
  background-color: rgba(255, 255, 255, 0.4);
  display: block;


.progressBarContainer div span.progressBar .inProgress 
  background-color: rgba(255, 255, 255, 1);
  width: 0%;
  height: 4px;
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css" rel="stylesheet"/>
<body>
<div class="sliderContainer">
  <div class="slider single-item">
    <div>Slide1</div>
    <div>Slide2</div>
    <div>Slide3</div>
  </div>
  <div class="progressBarContainer">
    <div>
      <h3>Slide 1</h3>
      <span data-slick-index="0" class="progressBar"></span>
    </div>
    <div>
      <h3>Slide 2</h3>
      <span data-slick-index="1" class="progressBar"></span>
    </div>
    <div>
      <h3>Slide 3</h3>
      <span data-slick-index="2" class="progressBar"></span>
    </div>
  </div>
</div>
</body>

对不起,我的英语不好。

【问题讨论】:

我看不到.slick() 的定义位置。 我是网络开发新手,不知道该怎么做 【参考方案1】:

您可以通过这种方式自定义此脚本。 在 js 文件中的函数 Interval() 中,在这一行上方

$('.inProgress' + progressBarIndex).css(
    width: percentTime + "%"
);

添加这部分

$('.inProgress').parent().parent().removeClass("yellow-text");
$('.inProgress' + progressBarIndex).parent().parent().addClass("yellow-text");

并在css文件中添加这一行

.yellow-text h3
  color :yellow;

最后,全区间函数是

function interval() 
    if (($('.slider .slick-track div[data-slick-index="' + progressBarIndex + '"]').attr("aria-hidden")) === "true") 
        progressBarIndex = $('.slider .slick-track div[aria-hidden="false"]').data("slickIndex");
        startProgressbar();
     else 
        percentTime += 1 / (time + 5);

        $('.inProgress').parent().parent().removeClass("yellow-text");
        $('.inProgress' + progressBarIndex).parent().parent().addClass("yellow-text");

        $('.inProgress' + progressBarIndex).css(
            width: percentTime + "%"
        );
        if (percentTime >= 100) 
            $('.single-item').slick('slickNext');
            progressBarIndex++;
            if (progressBarIndex > 2) 
                progressBarIndex = 0;
            
            startProgressbar();
        
    

详细查看这里 https://codepen.io/jamesjo29155352/pen/NWjOrrx

【讨论】:

以上是关于幻灯片处于活动状态时更改标签的颜色的主要内容,如果未能解决你的问题,请参考以下文章

选项卡处于非活动状态时,jQuery setInterval太快

jQuery Cycle 插件 - 如何返回当前显示幻灯片的索引号?

如何更改组合框下拉按钮的颜色

引导轮播更多幻灯片链接到一个指标

Bootstrap 4轮播上的hasClass不起作用

Slick Carousel - 如何更改活动幻灯片位置