jQuery实现的无缝轮播图

news/2024/7/11 0:55:54 标签: jQuery, 无缝轮播图

其实只要原生js学好了,能够实现轮播图无缝切换,再用jQuery写,感觉简单多了,嗯、为了熟悉jQuery的用法,还是动手把它实现了,废话不多说,看代码吧,实现的过程都注释在代码中了,嗯、要养成注释的好习惯

个人认为,无缝轮播,最主要解决的就是当图片在第一张(或最后一张),怎样点击上一张(或下一张)让其去到(最后一张)(或第一张)。

我这里的解决办法就是,将第一张克隆后添加到ul的最后,将最后一张克隆后添加的ul的最前面,然后当图片移动到原来的第一张图片的时候,让ul的left值为-width*len,同理,当图片移动到原来的最后一张的时候,让ul的left值为-width,嗯完美解决,如果看原理有点难懂,那就看代码吧,毕竟一例胜前言嘛

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>轮播图</title>
    <style>
        *{padding:0; margin:0;}
        li{list-style:none;}
        a{text-decoration:none;}
        #wrap{ width:600px; height:300px; border:1px solid #e15671; margin:auto; position:relative; }
        #box{
            margin:50px 100px; width:400px; height:200px; position:relative; background:red;overflow:hidden;
        }
        #wrap  .ul1{width:1600px; height:200px; position:absolute; left:0; top:0; }
        #wrap  .ul1 li{float:left; width:400px; height:200px;}
        #wrap  .ul1 img{width:100%; height:100%;}
        #wrap .sp{position:absolute; top:95px; display:block; width:30px; height:60px;text-align:center; line-height:60px; color:#fff; background-color:rgba(0,0,0,.6);}
        #wrap .sp1{left:20px;}
        #wrap .sp2{right:20px;}
        #wrap .p{position:absolute; bottom:0;width:100%;  text-align:center; height:50px; line-height:50px;}
        #wrap .p a{display:inline-block; width:30px; height:2px; margin-left:10px; background-color:#e15671;}
        #wrap .p  .active{background-color:#000;}

    </style>
</head>
<body>
<div id="wrap">
    <div id="box">
        <ul class="ul1">
            <li><img src="../imgs/1.jpg"/></li>
            <li><img src="../imgs/2.jpg"/></li>
            <li><img src="../imgs/3.jpg"/></li>
            <li><img src="../imgs/4.jpg"/></li>
        </ul>
    </div>
    <span class="sp sp1"><</span>
    <span class="sp sp2">></span>
    <p class="p"><a class="active" href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a></p>
</div>
<script src="jquery-1.11.1.js"></script>
<script>
    $(function(){
        var first = $('.ul1').find('li').first();
        var last = $('.ul1').find('li').last();
        var len = $('li').size();
        var i=0;
        var oBtn = true;
        var width = $('li').width();//获取一个li的宽度
        //克隆第一张和最后一个图片,方便后面的无缝轮播的实现
        $('.ul1').prepend(last.clone());
        $('.ul1').append(first.clone());
       // 动态计算ul的宽度
        $('.ul1').width($('li').size()*width);
        //让ul一开始的宽度为-width
        $('.ul1').css('left',-width);
        //单击下一个按钮,让ul向右移动
       $('.sp2').click(function(){
           if(oBtn){
               next();
           }

       });
        //单击上一个按钮,ul整体向左移动
        $('.sp1').click(function(){
            if(oBtn){
                prev();
            }
        });
        $('p').find('a').click(function(){
            i = $(this).index();
            $('.ul1').animate({
                left:-width*(i+1)
            },1000,function(){

                $('.p').find('a').attr('class','');
                $('.p').find('a').eq(i).attr('class','active');

            });
        });
       
       function prev(){
           oBtn = false;
           $('.ul1').animate({
               left:'-='+width
           },1000,function(){
               i++;
               if(i==len){
                   $('.ul1').css('left',-width);
                   i=0;
               }
               $('.p').find('a').attr('class','');
               $('.p').find('a').eq(i).attr('class','active');
               oBtn = true;
           });
       }
       function next(){
           oBtn = false;
           $('.ul1').animate({
               left:'+='+width
           },1000,function(){
               if(i==0){
                   i = len;
                   $('.ul1').css('left',-width*len);
               }
               i--;
               $('.p').find('a').attr('class','');
               $('.p').find('a').eq(i).attr('class','active');
               oBtn = true;
           });
       }
    });
</script>
</body>
</html>


http://www.niftyadmin.cn/n/952046.html

相关文章

js倒计时原理及实例总结

倒计时原理&#xff1a;用未来的时间-当前的时间 未来的时间&#xff1a;可以利用date对象传参的方式&#xff0c;获取到未来的时间,参数的形式有两种&#xff1a;数字形式和字符串形式new Date(2018,3,22,6,44,30)或者是new Date(April 22,2018 6:44:30) 现在的时间&#xff1…

C# 关键字 之 virtual

默认情况下,类中的方法是不可以被重写(override)的,不能重写非虚方法.要想重写方法,要用virtual修饰这个方法,总结:虚拟成员的实现可由派生类中的重写成员更改 转载于:https://www.cnblogs.com/zhangzheny/archive/2007/12/03/980696.html

window部署python项目_在window上部署python Django、Flask项目,采用apache+mod_wsgi方案

1、首先安装pythonhttps://www.python.org2、下载apache并安装https://www.apachehaus.com/cgi-bin/download.plx根据对应的系统下载即可&#xff0c;需注意的一点就是&#xff0c;python和apache的32位或者64位必须相对应。3、下载mod_wsgihttps://www.lfd.uci.edu/~gohlke/py…

利用flex制作筛子

如果对flex布局不了解的或是有疑问的请点击https://blog.csdn.net/lhjuejiang/article/details/80019673 核心代码&#xff1a; display:flex; flex-direction:column; align-items:center; justify-content:center; justify-content:space-around; display:flex;设置元素为弹性…

js 中 setTimeout()的用法

setTimeout()在js类中的使用方法 setTimeout (表达式,延时时间)setTimeout(表达式,交互时间)延时时间/交互时间是以豪秒为单位的(1000ms1s) setTimeout 在执行时,是在载入后延迟指定时间后,去执行一次表达式,仅执行一次setTimeout 在执行时,它从载入后,每隔指定的时间就执行…

垃圾回收算法_内存结构和垃圾回收算法

做JAVA也有接近2年的时间了&#xff0c;公司的leader说&#xff0c;做JAVA&#xff0c;三年是个坎&#xff0c;如果过了三年你还没有去研究JVM的话&#xff0c;那么你这个程序员只能是板砖的工具了。恰逢辞职&#xff0c;来个JVM的解析可好&#xff1f;JVM是Java Virtual Machi…

懒加载原理分析及实例

懒加载的原理及实现 什么是懒加载&#xff1f; 懒加载其实就是延迟加载&#xff0c;是一种对网页性能优化的方式&#xff0c;比如当访问一个页面的时候&#xff0c;优先显示可视区的图片而不是一次性加载所有图片&#xff0c;当需要显示的时候再发送图片请求&#xff0c;避免打…

Set NOCOUNT 和 SET XACT_ABORT

Set NOCOUNT ON 选项可防止将会话中每一条语句所影响的行数消息发回给请求的客户机 SET XACT_ABORT 指定当 Transact-SQL 语句产生运行时错误时&#xff0c;Microsoft&reg; SQL Server 是否自动回滚当前事务。 语法 SET XACT_ABORT { ON …