用 jQuery 手写轮播图

先上个效果截图:

主要包含以下功能点:

* 1、页面加载完,自动循环翻页
* 2、翻页按钮,翻页
* 3、定点翻页
* 4、翻页时同步圆点状态
* 5、鼠标进入,停止自动翻页
* 6、快速点击翻页的bug(加 isPaging 标志)

主要包含以下功能点:

* 1、页面加载完,自动循环翻页
* 2、翻页按钮,翻页
* 3、定点翻页
* 4、翻页时同步圆点状态
* 5、鼠标进入,停止自动翻页
* 6、快速点击翻页的bug(加 isPaging 标志)

上代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>轮播图 - jQuery 版本</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            ul{
                list-style: none;
            }

            /**
             * 轮播图布局样式
             */

            /**
             * 0、轮播图容器
             */
            #container{
                position: relative;
                width: 600px;
                height: 400px;
                margin: 50px auto;
                overflow: hidden;
            }

            /**
             * 1、图片(模拟)
             */
            ul#imgs{
                position: absolute;
                width: calc(600px * 7);
                left: -600px;
            }
            ul#imgs li{
                float: left;
                width: 600px;
                height: 400px;

                background-color: #42B983;
                color: white;
                text-align: center;
                line-height: 400px;
                font-size: 100px;
            }
            #imgs li:nth-child(odd){
                /* 模拟图片 */
                /*background-color: #9ACD32;*/
            }

            /**
             * 2、前后翻页按钮
             */
            #prev,#next{
                position: absolute;
                top: calc(50% - 15px);;
                width: 40px;
                height: 30px;
                background-color: yellow;
                border: none;
                font-weight: bold;
                font-size: 16px;
                cursor: pointer;
                opacity: .6;
                -webkit-user-select: none;
                -moz-user-select: none;
                -ms-user-select: none;
                user-select: none;
            }
            #prev,#next:focus{
                outline: none;
            }
            #prev{
                left: 10px;
            }
            #next{
                right: 10px;
            }

            /**
             * 3、小圆点定点翻页
             */
            ul#index{
                position: absolute;
                top: 360px;
                left: calc(50% - 55px);
                height: 12px;
            }
            ul#index li{
                float: left;
                height: 12px;
                width: 12px;
                margin: 0 5px;
                border-radius:50%;
                background-color: #800080;
                opacity: .4;
                cursor: pointer;
            }
            ul#index li.active{
                opacity: 1;
            }
        </style>
        <script src="jquery-1.12.4.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <!--
            1、进行页面布局
            2、js 代码
        -->
        <div id="container">
            <!--图片区-->
            <ul id="imgs">
                <li>
                    <div class="img">5</div>
                </li>
                <li>
                    <div class="img">1</div>
                </li>
                <li>
                    <div class="img">2</div>
                </li>
                <li>
                    <div class="img">3</div>
                </li>
                <li>
                    <div class="img">4</div>
                </li>
                <li>
                    <div class="img">5</div>
                </li>
                <li>
                    <div class="img">1</div>
                </li>
            </ul>
            <button id="prev">&lt;</button>
            <button id="next">&gt;</button>
            <ul id="index">
                <li class="active"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
        <script type="text/javascript">
            /**
             * 事件绑定
             * 1、页面加载完,自动循环翻页
             * 2、翻页按钮,翻页
             * 3、定点翻页
             * 4、翻页时同步圆点状态
             * 5、鼠标进入,停止自动翻页
             * 6、快速点击翻页的bug(加 isPaging 标志)
             */

            /**
             * 0、自动轮播
             */

            /**
             * 一些可以设置的参数
             */
            var PAGE_WIDTH = 600,
                PAGE_SLIDE_TIME = 600,    //单页滑动时间
                PAGE_INTERVAL = 1200 + PAGE_SLIDE_TIME,    //换页间隔时间
                curIndex = 1,    //合法取值 1 ~ 5(0 表示左边假的,6表示右边假的)
                isPaging = false    //是否正在翻页(用来处理连续点击翻页产生的bug)

            var intervalId;
            $(function(){
                intervalId = setInterval(next,PAGE_INTERVAL)
            })

            /**
             * 1、页面按钮
             */
            $("#next").click(function(){
                next()
            })

            $("#prev").click(function(){
                next(false)
            })

            $("#index li").click(function(){
                next($(this).index() + 1)
            })

            /**
             * 2、鼠标出入
             */
            $("#container").hover(function(){
                clearInterval(intervalId)
            },function(){
                intervalId = setInterval(next,PAGE_INTERVAL)
            })

            /**
             * 翻页核心功能
             * next(boolean|number])
             *
             *         boolean:    表示前后翻页
             *         number:        表示定点翻页
             */
            function next(flag=true){

                if(isPaging){
                    return
                }
                isPaging = true;

                var tempIndex = curIndex;

                //1 确定要翻过去的页码,计算 left 值
                typeof flag === "boolean" && (curIndex += flag ? 1 : -1)
                typeof flag === "number" && (curIndex = flag)
                left = - curIndex * PAGE_WIDTH

                //2 执行翻页动画
                $("#imgs").animate({"left":left},PAGE_SLIDE_TIME,function(){
                    if(curIndex == 0 || curIndex == 6){
                        //页码校正
                        curIndex = (curIndex + 5) % 5
                        left = - curIndex * PAGE_WIDTH
                        $("#imgs").css("left",left)
                    }
                    //清除正在翻页标志
                    isPaging = false
                })

                //3 同步点的状态
                $("#index li").eq(tempIndex -1).removeClass("active")
                $("#index li").eq(curIndex -1).addClass("active")
            }
        </script>
    </body>
</html>

原文地址:https://www.cnblogs.com/wuzz/p/10295786.html

时间: 2024-10-07 06:11:41

用 jQuery 手写轮播图的相关文章

简单的 js手写轮播图

html: <div class="na1">   <div class="pp">    <div class="na">     <img class="dd" src="../img/shouji/1.jpg">    </div>    <div class="na">     <img class=&

jquery手写轮播功能

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>小例子</title> <script type="text/javascript" src="js/jquery.js"></script> <style> @charset "utf-8"; /*

jQuery淡入淡出轮播图实现

大家好我是QD小白,这是人生第一次写博客,准备写的内容是Jquery淡入淡出轮播图实现,在此之前学习JS写的轮播图效果都感觉不怎么好,学习了jQuery里的淡入淡出效果后又写了一次轮播图效果明显感觉好了许多.现在我就来分享下自己写轮播图的思路和方法. HTML部分: <div id="img-box" style="width:700px; height:350px;"> <img style="opacity: 1;" wid

Jquery淡入淡出轮播图

Jquery淡入淡出轮播图 因为代码不多所以我就写一个html文件里了 html代码 <div class="banner"> <ul> <li><a href="javascript:;"><img src="./1 (1).png" /></a></li> <li><a href="javascript:;"><

第一次尝试自己写轮播图

其实嗯,对于前端我与很多很多想说的话,但是看着种种最后却不知道说什么了,既然这样那就什么都不要说 第一次尝试自己写轮播图,对于初学前端的我来说我感觉我晚了很久了 为什么要模仿写一份出来呢,我也不知道,做个纪念吧 html代码页面 7 <!DOCTYPE html> 8 <html> 9 <head> 10 <meta charset="UTF-8"> 11 <title></title> 12 <link r

写jquery插件【轮播图】历程

轮播图插件的任务已经接近尾声,在书写轮播图期间确实有一些小的感触的.感兴趣的可以访问我的轮播图的线上地址:轮播图 首先,轮播图插件其实并不是我第一次写,之前也写过,不过那时候是按照别人的思路写下来的,算起来大概有一年了,这次又一次开始轮播图是因为拜读了<单页面Web应用 JavaScript从前端到后端>的这本书的1-4章,我开始跃跃欲试的想把它用到自己的代码中,书本中前四章的思想是将js模块化,我就跟着作者的代码思路以及代码习惯先尝试着做了个轮播图,发现作者的模块化思想非常好,时间长了,养成

jquery简单无缝轮播图实现

此简单轮播图布局原理是: 一个div包含图片列表,和控制按钮.其宽度等于图片的宽度,溢出隐藏. 图片要左浮动. jquery原理: 开一个定时器,隔一段时间执行图片列表向左移动一个图片的宽度,同时在移动时设置一个回调函数. 把向左移动的图片,也是图片列表的第一张图片,添加到图片列表ul的末尾. 这样实现了,图片自动播放的效果. 怎么带动图片控制的小按钮变亮? 因为每一次图片轮播,都会改变图片值得索引,那就给函数加一个变量 i ,每一次执行定时器都会i++: var spanindex=i%4;

基于Jquery实现的轮播图

前阵子我用js写了一个轮播图,现在的话换成jQuery来实现,先看看效果图 首先是html结构,如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>jquery版图片轮播</title> <link rel="stylesheet" href="css/index.css" /> &l

jQuery实现简易轮播图的效果

(图片素材取自于小米官网) 刚开始接触jQuery的学习,个人觉得如果为了实现多数的动态效果,jQuery的确很简易方便. 下面简易的轮播图效果,还请前辈多多指教~ (努力学习react vue angular中,加油~~~) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> &