JQ中轮播图中的问题

234 阅读3分钟

下面是一段轮播图的代码

            <li><a href="#"><img src="img/huandengpian_1.jpg" /></a></li>
            <li><a href="#"><img src="img/huandengpian_2.jpg" /></a></li>
            <li><a href="#"><img src="img/huandengpian_3.jpg" /></a></li>
            <li><a href="#"><img src="img/huandengpian_4.jpg" /></a></li>
            <li><a href="#"><img src="img/huandengpian_5.jpg" /></a></li>
            <li><a href="#"><img src="img/huandengpian_6.jpg" /></a></li>
        </ul>
        <!--轮播图布局结束-->
    </div>
    <div class="showNav">
        <!--侧边栏布局开始-->
        <ul>
            <li><img src="img/huandengpian_1s.jpg" alt=""></li>
            <li><img src="img/huandengpian_2s.jpg" alt=""></li>
            <li><img src="img/huandengpian_3s.jpg" alt=""></li>
            <li><img src="img/huandengpian_4s.jpg" alt=""></li>
            <li><img src="img/huandengpian_5s.jpg" alt=""></li>
            <li><img src="img/huandengpian_6s.jpg" alt=""></li>
        </ul>
        <!--侧边栏布局结束-->
    </div>   
    

    下面是样式的代码

    接下来就是轮播图的重点jquery 部分了

    代码如下 :

    <script>
        $(function(){
            var oneWidth = $('.slideShow').find('ul li').eq(0).width()
            //定义变量 获取图片的宽度 
            var timer = null ;
            //定义定时器的返回值 主要用于关闭定时器 
            var iNow = 0 ;
            //iNow 为正在展示的图片的索引值,当用户打开网页是 显示的是第一张图片 所以索引值为0
            $('.showNav ul li').on('click',function(){
            //为每个侧边导航图片注册点击事件
            var index = $(this).index();
            // alert('我被点了');
            //获取触发事件元素的索引值 
                iNow = index ;
            $('.slideShow>ul').stop()
            //这里的意思是进行动画之前停止之前缓存的动画
            $('.slideShow>ul').animate({ 
                // .animate()方法 执行CSS样式的自定义动画 只有数字的值可以创建
                "left":-oneWidth*iNow,
                //这里用到left 属性 所以 ul样式中需要设置 position: relative; 让ul左移N 个图片大小的宽度,N根据被点击的按钮索引值iNOW确定
                
            });
            });
    
            function autoPlay(){
    
                timer=setInterval(function(){       
                //打开定时器
                iNow++;                          
                //让图片的索引值次序加1,这样就可以实现顺序轮播图效果
                if(iNow>$('.showNav ul li').length-1){   
                 //当到达最后一张图的时候,让iNow赋值为第一张图的索引值
                iNow=0;
                }
                $('.showNav ul li:eq('+iNow+')').trigger("click");    
                //模拟触发侧边图片导航的click
                },2000);   
                //2000为轮播的时间
            }
    
            //调用函数 
            autoPlay() ;
    
        })
    
    </script>
     <script src="jquery.js"></script>
    

    可以说写到这 简单的轮播图效果就完成了

    但是在运行过程中发现了一些问题 ,但我们点击侧边导航时,或者点击轮播图本身时候 ,轮播只是稍微暂停一下 就会继续动画效果。 这跟我们预想中 ,点击侧边导航或者鼠标放在轮播图上轮播图效果停止播放 ,这种效果不一样 ,于是有对其代码进行了一些优化

    最终代码如下

    <script>
        $(function(){
            var oneWidth = $('.slideShow').find('ul li').eq(0).width()
            //定义变量 获取图片的宽度 
            var timer = null ;
            //定义定时器的返回值 主要用于关闭定时器 
            var iNow = 0 ;
            //iNow 为正在展示的图片的索引值,当用户打开网页是 显示的是第一张图片 所以索引值为0
            $('.showNav ul li').on('click',function(){
            //为每个侧边导航图片注册点击事件
            var index = $(this).index();
            // alert('我被点了');
            //获取触发事件元素的索引值 
                iNow = index ;
            $('.slideShow>ul').stop()
            //这里的意思是进行动画之前停止之前缓存的动画
            $('.slideShow>ul').animate({ 
                // .animate()方法 执行CSS样式的自定义动画 只有数字的值可以创建
                "left":-oneWidth*iNow,
                //这里用到left 属性 所以 ul样式中需要设置 position: relative; 让ul左移N 个图片大小的宽度,N根据被点击的按钮索引值iNOW确定
                
            });
            });
    
            function autoPlay(){
    
                timer=setInterval(function(){       
                //打开定时器
                iNow++;                          
                //让图片的索引值次序加1,这样就可以实现顺序轮播图效果
                if(iNow>$('.showNav ul li').length-1){   
                 //当到达最后一张图的时候,让iNow赋值为第一张图的索引值
                iNow=0;
                }
                $('.showNav ul li:eq('+iNow+')').trigger("click");    
                //模拟触发侧边图片导航的click
                },2000);   
                //2000为轮播的时间
            }
    
            // 创建一个封装函数  触发事件使自动轮播效果停止
        function  stop(){
            $('.slideShow>ul').on('mouseover',function(){
                clearInterval(timer);
            });
            $('.slideShow>ul').on('mouseout',function(){
                autoPlay()
            });
        }
    
         //调用函数 
        stop() ;
        autoPlay() ;
    
        })
    
    </script>
    <script src="jquery.js"></script>