jQuery实现轮播图

3,898 阅读2分钟

实现功能

界面

1.图片淡入淡出轮播,鼠标移入停止,移开继续
2.点击左右箭头切换图片,有鼠标悬停特效
3.点击下方灰点显示对应图片,有鼠标悬停特效
4.图片切换时,灰点也对应显示

思路

1.图片轮播

	1.1 图片采用绝对定位,使其重叠
    1.2 默认透明度为0,需显示图片则透明度置1
    1.3 setInterval()实现自动轮播

2.鼠标移入移除事件mouseover()和mouseout()
3.鼠标单击事件click()
4.设置全局变量index来同步图片与灰点显示,依靠eq()获取元素节点

一些细节

  1. position属性
  1.1 static
  	静态定位,默认值。没有定位,元素出现在正常的流中(忽略TRBL或者 z-index 声明)。
  1.2 relative
  	相对定位,生成相对定位的元素,相对于其正常(原先本身)位置进行定位。
  	元素通过TRBL属性规定位置和z-index规定层次分级。
  1.3 absolute
  	绝对定位,生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
  	元素通过TRBL属性规定位置和z-index规定层次分级。
  1.4 fixed
  	固定定位,生成绝对定位的元素,相对于浏览器窗口进行定位。
  	元素通过TRBL属性规定位置和z-index规定层次分级。
  	位置不随滚轮移动而改变。
  1. 涉及jQuery API
  2.1 css
      css(properties)要设置为样式属性的名/值对。
  2.2 animate
      animate(params,speed)用于创建自定义动画的函数。
      -params:一组包含作为动画属性和终值的样式属性和及其值的集合
      -speed:三种预定速度之一的字符串(slow,normal,fast)或表示动画时长的毫秒数值.
  2.3 eq
      eq(n) 获取当前链式操作中第n个对象

总结

jQuery极大简化了Js编程。

源码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="jquery-3.5.0.min.js"></script>
</head>
<style>
  	
    *{
        margin: 0px;
        padding: 0px;
    }
    div{
        width: 1226px;
        height: 460px;
        margin: auto;
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0; 
    }
    img{
        position: absolute;
        width: 100%;
        height: 100%;
    }
    #myimg{
        opacity: 0;
    }
    #left,#right{
        position: absolute;
        top: 195px;
        margin: 0px;  
        width: 41px;
        height: 69px;
        background-image: url(./images/arrow.png);
        background-color:rgba(0,0,0,0);
        cursor: pointer;
    }
    #left{
        background-position: -83px 0px;
    }
    #left:hover{
        background-position: 0px 0px;
    }
    #right{
        left: auto;
        background-position: -124px 0px;
    }
    #right:hover{
        background-position: -41px 0px;
    }
    #point{
        width: 100px;
        height: 10px;
        position: absolute;
        left: auto;
        top: auto;
        right: 30px;
        bottom: 20px;
    }
    #point ul li{
        width: 6px;
        height: 6px;
        border: 2px solid #fff;
        border-color: hsla(0,0%,100%,.3);
        border-radius: 10px;
        list-style: none;
        background: rgba(0,0,0,.4);
        margin:0 5px;
        float: left;
        cursor: pointer;
    }
</style>
<body>
    <div id="did">
        <img id="myImg" src="./images/1.webp" alt="">
        <img id="myimg" src="./images/2.webp" alt="">
        <img id="myimg" src="./images/3.webp" alt="">
        <img id="myimg" src="./images/4.webp" alt="">
        
        <div class="arrow" id="left"></div>
        <div class="arrow" id="right"> </div>
      
        <div id="point">
            <ul id="uid"><li></li><li></li><li></li><li></li></ul> 
        </div>
    </div>
</body>
<script>
    var index = 0; 
    doStart();// 默认开启

    // 自动轮播效果
    function doStart(){
        myTime = setInterval(function(){
            //让上一张淡出
            imgOut(index);
            index = ++index%4;
            //让下一张淡入
            imgIn(index);
        },3000); 
    }
     
    // 鼠标移入暂停轮播;移出继续
    $("#did").mouseover(function(){
        clearInterval(myTime);
    }).mouseout(function(){
        doStart();
    });
  
    // 右箭头单击事件
    $("#right").click(function(){
 
        //让上一张淡出
        imgOut(index);
        index = ++index%4;
        //让下一张淡入
        imgIn(index); 
    });
  
    // 左箭头单击事件
    $("#left").click(function(){

        //让上一张淡出
        imgOut(index);
        index--;
        if(index < 0){
            index = 3;
        }
        //让下一张淡入
        imgIn(index);
    });
                      
    // 灰点事件
    $("li").mouseover(function(){// 鼠标移入
        dotIn(this);
    }).mouseout(function(){// 鼠标移出
        dotOut(this);    
    }).click(function(){// 单击
        // 不同的灰点单击才变换
        if(index !=  $(this).index()){
            imgOut(index);// 当前的淡出
            index = $(this).index();
            imgIn(index);// 小圆点对应的淡入
        }
    });
    // 图片淡入
    function imgIn(num){
        $("img").eq(num).animate({"opacity":1},1000);
        dotIn( $("li").eq(num));// 对应灰点亮起
    }
    // 图片淡出
    function imgOut(num){
        $("img").eq(num).animate({"opacity":0},1000);
        dotOut( $("li").eq(num));// 对应灰点暗去
    }
    // 小灰点亮
    function dotIn(dot){
        $(dot).css({"background":"hsla(0,0%,100%,.4)","borderColor":"rgba(0,0,0,0.4)"});
    }
    // 小灰点暗
    function dotOut(dot){
        $(dot).css({"background":"rgba(0,0,0,.4)","borderColor":"hsla(0,0%,100%,.3)"});
    }
</script>
</html>