带有jquery的图片幻灯片库,如何做到这一点?

Posted

技术标签:

【中文标题】带有jquery的图片幻灯片库,如何做到这一点?【英文标题】:Image slide gallery with jquery, how to do this? 【发布时间】:2020-11-18 10:15:49 【问题描述】:

我正在尝试使用 jQuery 制作一个滑块,但实际上我不知道是什么导致了错误。

我对这门语言还很陌生,我正在学习,是的,我的代码可能看起来很愚蠢:D

好的,所以基本上我有五个图像:1、2、3、4 和 5,下面是我的代码:

html

<html>
...
<section id="image_slider">
    <div id="trapezoid"></div> <!-- I'll explain that div below :P -->
    
    <img class="image" id="img1" src="1.png" ></img>
    <img class="image" id="img2" src="2.png" ></img>
    <img class="image" id="img3" src="3.png" ></img>
    <img class="image" id="img4" src="4.png" ></img>
    <img class="image" id="img5" src="5.png" ></img>
    
    
    
 </section>
...
</html>

CSS:

<CSS>
#image_slider 
    height:500px;
    
    /*
    background-image: url("1.png");
    background-image: url("2.png");
    background-image: url("3.png");
    background-image: url("4.png");
    background-image: url("5.png");
    */


/* 
#trapezoid

    border-bottom: 500px solid #555;
    border-left: 0px solid transparent;
    border-right: 125px solid transparent;  
    height: 0;
    width: 500px;
    position:absolute;

*/
   
.image 
    vertical-align:top;
    position:absolute;

</CSS>

javascript

<script type="text/javascript">
var i=0;
setTimeout(function()
i++;
if(i=0)

$(".image").not("img1").hide();

else if(i=1)

$(".image").not("img2").hide();

else if(i=2)

$(".image").not("img3").hide();

else if(i=3)

$(".image").not("img4").hide();

else if(i=4)

$(".image").not("img5").hide();

else if(i=5)


i=-1;

2000);
);
  </script>

好的,所以从一开始:我正在考虑两种方式我希望滑块的外观。

第一个也是原始的,在这种情况下,我想制作一个滑块,其中图像将从右到左移动,我也想在这个滑块上设置一个梯形,这就是为什么有一个 id="trapezoidal" 的 div ,但是当我在 html 文档中实现图像时似乎不可能这样做,因为图像不想让这个梯形覆盖它们,当我在样式表中将这些图像实现为背景图像时,它有点工作,但对我来说不可能为 5 个背景图像设置动画,所以看起来不错。

最后,请帮助我编写 jQuery 代码,以使滑块以这种方式工作:每 5 秒图像通过向左滑动而改变。旧的向左移动消失,新的向左移动出现。 (新的应该在旧的“后面”)。

另外请解释为什么我的 jQuery 代码不起作用,我的意思是我知道 jQuery 中有循环,例如 while、for 等,但它们也不起作用,我不知道为什么循环不是每 2 秒重复一次。 ..

【问题讨论】:

setTimeOut 只被调用一次。使用设置间隔。您需要在 2000 年之前添加一个“,”。这是 if(i == 4) NOT if(i = 4) 而且,您的代码只是使图像被隐藏......不显示。我认为您需要先学习javascript的基础知识,然后再试一次 【参考方案1】:

代码、开关和幻灯片图像的最简单版本。如果您愿意,您可以对此进行改进和改进。

$(document).ready(function () 
            let intrvl = 3000;
            var i = 0;
            $(".image").hide();
            setInterval(function () 

                i++;
                $(".image").hide();
                $("#img" + i).show();

                $("#img" + i).css("left", "300px");
                $("#img" + i).animate(
                    
                        "left": "0px"
                    , intrvl);

                if (i >= 5) 
                    i = 0;
                
            , intrvl);

        );
        .image 
            position: fixed
        
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section id="image_slider">
        <div id="trapezoid"></div> <!-- I'll explain that div below :P -->
        <img class="image" id="img1"  src="images/1.jpg"  />
        <img class="image" id="img2"  src="images/2.jpg"  />
        <img class="image" id="img3"  src="images/3.jpg"  />
        <img class="image" id="img4"  src="images/4.jpg"  />
        <img class="image" id="img5"  src="images/5.jpg"  />
    </section>

【讨论】:

好吧,我明白这是如何工作的,我重做了你的代码,所以图像同时淡入和淡出。我有最后一个问题。这将是单独的评论。【参考方案2】:

好的,这里是我稍微修改过的Alwaysa Learner的代码:

<script type="text/javascript">

$(document).ready(function () 
            let intrvl = 3000;
            var i = 0;
            var d = 1;
            $(".image").not("#img1").hide();
            setInterval(function () 
                
                i++;
                d++;
                $(".image").hide();
                $("#img" + i).show();
                
                    
                $("#img" + i).css("opacity", "1.0");
                $("#img" + i).animate(
                    
                        "opacity": "0"
                    , intrvl);
                $("#img" + d).show();   
                $("#img" + d).css("opacity", "0");
                $("#img" + d).animate(
                    
                        "opacity": "1.0"
                    , intrvl);
                

                if (i >= 5) 
                    i = 0;
                
                if (d >=6) 
                    d = 1;
                    $(".image").hide();
                    $("#img5").show();
                
                    
                    $("#img5").css("opacity", "1.0");
                    $("#img5").animate(
                    
                        "opacity": "0"
                    , intrvl);
                    $("#img1").show();  
                    $("#img1").css("opacity", "0");
                    $("#img1").animate(
                    
                        "opacity": "1.0"
                    , intrvl);
                    
                
                
            , intrvl);

        );
  </script>

滑块本身工作得很好。但我想尝试在不断变化的图像上添加这个梯形:

CSS:

#trapezoid 
border-bottom: 500px solid #555;
    border-left: 0px solid transparent;
    border-right: 125px solid transparent;
    height: 0;
    width: 500px;

问题是,当它们的位置设置为“位置:固定”时,它们显示在梯形上方,我想在梯形上添加“img1”、“img2”、“img3”等段落.

我也尝试过设置 position:absolute 为梯形并删除 .image 类的位置设置,但没有成功。

所以我的问题是:由于上面的 jquery 代码,当图像显示和隐藏时,是否可以使这个梯形显示在图像上方? 或者我应该......不知道......例如使用 GIMP 在图像本身上添加梯形形状?但它会以负面的方式影响梯形和段落的不透明度,不是吗?

【讨论】:

你能把你的html代码包含进来,做一个sn-p代码吗?

以上是关于带有jquery的图片幻灯片库,如何做到这一点?的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 在开始幻灯片之前等待页面完成加载?

带有 CATransition 的页面幻灯片动画

点击全屏图片库

斯威夫特 - Instagram 是如何做到这一点的? [关闭]

我怎样才能做到这一点? - 动画报价 - JQuery

带有左右按钮的图片库