无缝滚动详解

<!DOCTYPE html>
<html>

<head>
    <title></title>
    <meta charset="utf-8" />
    <script type="text/javascript" src="jquery.min.js"></script>
    <style type="text/css">
    div,
    image,
    button,
    ul,
    li {
        margin: 0;
        padding: 0;
    }
    /*显示图片的内容区,大小刚好等于图片的大小*/

    .img-scroll {
        position: relative;
        width: 430px;
        height: 320px;
        margin: 0 auto;
        /*overflow: hidden;*/
    }
    /*上下一张按钮,样式随意控制*/

    .img-scroll>button {
        display: none;
        position: absolute;
        top: 50%;
        margin-top: -22px;
        width: 48px;
        height: 48px;
        border-radius: 50%;
        border: 3px solid #eee;
        outline: none;
        color: #eee;
        font-size: 30px;
        font-weight: bold;
        background-color: rgba(0, 0, 0, .3);
        cursor: pointer;
    }

    .next {
        right: 0;
    }
    /*有多少张图片,就把宽度设为内容区宽度*图片数量,让所有图片排成一横排,比如我这就是430*5=2150*/

    .img-content {
        width: 2150px;
        height: 320px;
        overflow: hidden;
    }
    /*装每张图片的div*/

    .img-content>div {
        float: left;
        width: 430px;
        height: 320px;
    }

    .arc-list {
        position: absolute;
        bottom: 0;
    }

    .arc-list>li {
        display: inline-block;
        width: 15px;
        height: 15px;
        border-radius: 50%;
        list-style-type: none;
        background-color: rgba(0, 0, 0, .5);
    }
    </style>
</head>

<body>
    <div class="img-scroll" id="imgScroll">
        <div class="img-content" id="imgCon">
            <div>
                <a href="#"><img src="1.png" alt="gg" /></a>
            </div>
            <div>
                <a href="#"><img src="2.png" alt="gg" /></a>
            </div>
            <div>
                <a href="#"><img src="3.png" alt="gg" /></a>
            </div>
            <div>
                <a href="#"><img src="4.png" alt="gg" /></a>
            </div>
            <div>
                <a href="#"><img src="5.png" alt="gg" /></a>
            </div>
        </div>
        <button type="button" id="prev">
            <</button>
                <button type="button" class="next" id="next">></button>
                <ul class="arc-list" id="arcList">
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                </ul>
    </div>
    <script type="text/javascript">
    $(function() {
        //缓存存放图片的区域
        var $imgCon = $("#imgCon"),
            //得到内容去的宽度
            w = $("#imgScroll").css("width");
        //缓存小圆点和它的数组长度
        $li = $("#arcList li"),
            len = $li.length,
            //用来存放需要关闭的setInterval的值
            timer = null,
            //用于确定该显示第几个小圆点的参数
            index = 0;
        //默认将第一个小圆点点亮
        $li.get(index).style.backgroundColor = "red";
        /*自动滚动图片的方法,很简单,移走第一张,下一张自然的就显示出来了,
        然后把第一张放到末尾去,并把它的marginLeft归零,当播放到最后一张就可以无缝衔接第一张了
        */
        function imgScroll() {
            //每次将第一个div向左移出内容区,下一个div自动显示在内容区,并将第一个div附加到父元素的最后
            $imgCon.children("div:first").animate({
                marginLeft: "-" + w
            }, 1000, "swing", function() {
                $(this).css({
                    marginLeft: "0"
                }).appendTo($imgCon);
                //将当前小圆点熄灭
                $li.get(index).style.backgroundColor = "rgba(0,0,0,.5)";
                if (index == len - 1) {
                    index = 0;
                } else {
                    index++;
                }
                //将下一个小圆点点亮
                $li.get(index).style.backgroundColor = "red";
                //判断小圆点是否为最后一个,如果是,则将标记小圆点的参数归零,重新从第一个开始
            });
        }
        timer = setInterval(imgScroll, 3000);

        //鼠标放在图片上停止滚动,鼠标离开图片继续滚动
        $("#imgScroll").hover(
            function() {
                clearInterval(timer);
                //控制按钮的显示
                $("#imgScroll button").show(300, "swing");
            },
            function() {
                timer = setInterval(imgScroll, 3000);
                $("#imgScroll button").hide(300, "swing");
            }
        );
        //手动点击下一张时只需手动调用imgScroll就行
        $("#next").on("click", function() {
            /*如果连续点击下一张的话,会引发不和谐的东西,所以我们判断第一张图片的marginLeft值,如果正在执行动画,它的marginLeft是不会为0的,所以这样判断就确保了执行完了一个动画才会调用下一张的方法*/
            var marginLeft = parseInt($imgCon.children("div:first").css("marginLeft"));
            if (marginLeft == 0) {
                imgScroll();
            }
        });
        //手动点击上一张图片的方法
        $("#prev").on("click", function() {
            //判断同上
            var marginLeft = parseInt($imgCon.children("div:first").css("marginLeft"));
            if (marginLeft == 0) {
                //上一张图片就是刚才移动到末尾的那张,所以我把末尾的那张添加到第一张的前面
                $imgCon.children("div:first").before($imgCon.children("div:last"));
                /*注意这里的第一张是刚才末尾的那张图片了,设置marginLeft为-w是将它放在内容区的左边,营造从左滑向右的效果,这里的图片滚动全部操作第一张图片,这张图片向左离开内容区时,就将位置留给下一张显示,当它从左到右回来是,就把下一张挤出内容区*/
                $imgCon.children("div:first").css({
                    marginLeft: "-" + w
                }).animate({
                    marginLeft: "0"
                }, 1000, "swing", function() {
                    //将当前小圆点熄灭
                    $li.get(index).style.backgroundColor = "rgba(0,0,0,.5)";
                    if (index == 0) {
                        index = len - 1;
                    } else {
                        index--;
                    }
                    //将上一个小圆点点亮
                    $li.get(index).style.backgroundColor = "red";
                    //判断小圆点是否为第一个,如果是,则将标记圆点的参数设为最大,即最后一个小圆点
                });
            }
        });
    });
    </script>
</body>

</html>

  备注:需加载jquery

时间: 2024-10-12 16:28:37

无缝滚动详解的相关文章

HTML之marquee(文字滚动)详解

语法: <marquee></marquee> 以下是一个最简单的例子: 代码如下: <marquee><font size=+3 color=red>Hello, World</font></marquee> 下面这两个事件经常用到: onMouseOut="this.start()" :用来设置鼠标移出该区域时继续滚动 onMouseOver="this.stop()":用来设置鼠标移入该区

js无缝滚动原理及详解[转自刹那芳华]

刚刚接触JS,网上找了一些关于无缝滚动的教程,但都大同小异,对我这种新手来说也只是会用,不知道什么意思,想要自己写个更是一头雾水.于是找了一些资料,详细说明一下JS无缝滚动的原理,相信看过这篇文章之后,自己写一个滚动效果不会是什么难题了.    本文以CSS+div+js为例,详细说明无缝滚动实现原理.    首先建立四个层(div). 结构如下: id="a"(以下简称a,id="b"简称为b)为轮播的可视部分,b为轮播部分,b_1为轮播内容,但b_2和b_1要在

jQuery实现滚动效果详解1

声明:第一次写原创,本人初学,很多地方一知半解,本篇算是一个学习的笔记,欢迎批评指正,转载请注明. 今天要做的效果是在网上经常能看到多幅图片向左无缝滚动,鼠标滑过动画暂停,鼠标滑出动画继续的效果.网上现成的代码和插件很多,拿来用有时候不大顺手,今天我就来学习一下它的原理. 要实现这个效果:1.需要一个展示区,滚动的内容只有通过展示区才能被看到id=visual_area2.把滚动的内容横向排列的载体,我们姑且叫它画布,注意不能理解PS中的画布class=scroll_area3.看起来要滚动的内

Cocos2d-x滚动列表详解(CCScrollView的使用)

今天要写一个滚动列表功能,类似下面这样.(图片资源都是自己从天天酷跑里面抠的,仅用于学习方便) 首先,这样一个列表就和iOS里面的UITableView没什么两样,当然,Android中肯定也存在类似的控件. 在cocos2d-x引擎中参照ios中的UITableView实现了一个叫做CCTableView的类,用于创建列表,对于熟悉ios程序设计的人来说,这个内容应该是很好理解的. 下面就介绍下CCTableView. 首先,mark几个比较好的博文. Cocos2d-x CCTableVie

fullPage教程 -- 整屏滚动效果插件 fullpage详解

1.引用文件 [html] view plain copy print?在CODE上查看代码片派生到我的代码片 <link rel="stylesheet" href="css/jquery.fullPage.css"> <script src="js/jquery.min.js"></script> <script src="js/jquery-ui.min.js"></

图片滚动(UP)的JS代码详解(offsetTop、scrollTop、offsetHeigh)【转】

源地址 信息技术教材配套的光盘里有一段设置图片滚动的JS代码,与网络上差不多,实现思路:一个设定高度并且隐藏超出它高度的内容的容器demo,里面放demo1和 demo2,demo1是滚动内容,demo2为demo1的直接克隆,通过不断改变demo的scrollTop或者scrollLeft达到滚动的目的,当demo1与demo2的交界处滚动至demo顶端时直接跳回初始位置,因为demo1与demo2一样,所以分不出跳动的瞬间,从而达到“无缝”滚动的目的. 代码如下:  <DIV id=demo

js从右向左无缝滚动原理

今天公司的首页新增一个公告需求,类似于如下这段代码的效果,做完以后仔细思考了一下其中的原理 在说原理之前建议先看看我上一篇 HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解 这篇文章,里面例图即视化的解释了各种定位的不同,以及在各浏览器下不同的解析结果. 不敲太多的文字,直接上代码,干货都在注释里 <!DOCTYPE html> <head> <meta http-equiv="Content-

基于jQuery的上下无缝滚动应用(单行或多行)

$(function(){     var _wrap=$('ul.line');//定义滚动区域     var _interval=2000;//定义滚动间隙时间     var _moving;//需要清除的动画     _wrap.hover(function(){         clearInterval(_moving);//当鼠标在滚动区域中时,停止滚动     },function(){         _moving=setInterval(function(){     

CentOS 7以yum方式安装zabbix3.2及配置文件详解

一.zabbix简介与环境准备 简介详见 ---> zabbix简介 环境准备: CentOS 7(node7):zabbix-server,web,mysql,agent mariadb:5.5.50 zabbix组件:3.2.1 apache:2.4.6 二.安装与配置 1.安装数据库(mariadb),可直接yum安装 [[email protected] ~]# vim /etc/yum.repos.d/MariaDB.repo [mariadb]  name = MariaDB  ba