2018-10-25

轮播的实现

看了网上很多轮播实现的例子,自己简单理了理。

整体思路是,写一个盒子设置成一张轮播图的高度和宽度,设置overflow属性值为hidden,即溢出部分直接屏蔽掉

把图片设置成一定的高度和宽度,利用float属性将图片并排在一排,通过移动该大盒子,完成图片的切换。

如图所示,

html主体部分:

<div class="box">/*这是最外面的边框*/

    <div id="pai">/*移动的实际上是这个*/

        <ul>

            <li><img src="img/1367482836394.jpg" alt=""/></li>

            <li><img src="img/1370512282166.jpg" alt=""/></li>

            <li><img src="img/1373337078811.jpg" alt=""/></li>

            <li><img src="img/20131227141118_VPjfy.jpeg" alt=""/></li>

            <li><img src="img/1367482836394.jpg" alt=""/></li>

        </ul>

        <div class="square">/*右下角的数字小圆点*/

            <span class="current">1</span>/*current来设置样式*/

            <span>2</span>

            <span>3</span>

            <span>4</span>

        </div>

        <div class="zuoyou">/*这两个是控制图片左右切换的两个手动点击按钮*/

            <span id="left"><</span>

            <span id="right">></span>

        </div>

    </div>

</div>

CSS部分:


*{

            margin:0;

            padding:0;

        }/*全选择器,把margin,padding置为零*/

        img{

        width:490px ;

        height: 327px;

        }/*把图片宽高设置与pai(即装图片的盒子)一致,以免溢出的部分被遮住*/

        .box{

            width: 490px;

            height: 327px;

            padding: 5px;

            border: 1px solid #cccccc;

            margin: 200px auto;

        }/*设置最外层边框的样式*/

        #pai {

            width: 490px;

            height: 327px;

            position: relative;

            overflow: hidden;/*溢出处理,直接隐藏*/

        }

        ul{

            list-style: none;/*把前面的小点点去掉*/

            width: 500%;

            position: absolute;

            left:0px;

        }

        li{

            float: left;/*将图片并排*/

        }

        .square {

            position: absolute;

            bottom: 10px;

            right: 10px;

        }

        span {

            display: inline-block;

            width: 16px;

            height: 16px;

            background-color: #fff;

            text-align: center;

            margin: 3px;

            border: 1px solid #ccc;

            line-height: 16px;

            border-radius: 8px;

            cursor: pointer;

        }

        .current {

            background-color: darkorange;

            color: #fff;

        }/*切换时的样式*/

        .box #pai img{

            width: 490px;

        }

        .zuoyou{

            width: 490px;

            height: 80px;

            position: absolute;

            top: 150px;

            left:0;

            color: #1bb52b;

            display: none;/*未移入是隐藏*/

}

        .zuoyou #left{

            width: 40px;

            height: 30px;

            text-align: center;

            float:left;

            font: 30px/30px "simsun";/*字号 行高 字体*/

            border-radius: 10px;

            background-color: rgba(0,0,0,0.8);

        }

        .zuoyou #right{

            width: 40px;

            height: 30px;

            text-align: center;

            float:right;

            font: 30px/30px "simsun";

            border-radius: 10px;

            background-color: rgba(0,0,0,0.8);

        }

JS部分:

window.onload=function () {

    var pai =document.getElementById("pai");

    var ul=pai.children[0];/*获取无序表*/

    var spanArr=pai.children[1].children;/*获取右下角的数标,这是一个类数组*/

    var imgWidth=pai.offsetWidth;/*获取图的可见宽度*/

    var zuoyou=pai.children[2];/*获取控制左右的大标签*/

    var Left =zuoyou.children[0];/*左*/                       

    var Right =zuoyou.children[1];/*右*/

    var spanIndex= 0;

    var imgIndex=0;

    var timer1=setInterval(autoPlay,3000);

  function autoPlay() {

      spanIndex++;

                if(spanIndex>spanArr.length-1){

                    spanIndex=0;

                }/*当自动播放时,到最后一个时,又重新开始*/

                for(var i=0;i<spanArr.length;i++){

                    spanArr[i].className="";

                }

                spanArr[spanIndex].className="current";/*该点的样式为current*/


                imgIndex++;

                if(imgIndex>spanArr.length){

                    ul.style.left= 0;

                    imgIndex = 1;

                }

                animate(ul,-imgWidth*imgIndex);

            }   

            pai.onmouseover =function () {  /*鼠标放在pai上清除大的定时器*/

                clearInterval(timer1);

                zuoyou.style.display="block";

            }

            pai.onmouseout =function () { /*鼠标移开pai  加上定时器*/

                timer1=setInterval(autoPlay,1000);

                zuoyou.style.display="none";

            }

            for(var i=0;i<spanArr.length;i++){

                spanArr[i].index=i;

                spanArr[i].onmouseover=function () {

                  clearInterval(timer1);

                  for(var j=0;j<spanArr.length;j++){

                      spanArr[j].className="";

                    }

                    this.className="current";

                    spanIndex = imgIndex= this.index;

                    animate(ul,-imgWidth*this.index);

                }

            }

          Left.onclick =function () {

              spanIndex--;

              for(var i=0;i<spanArr.length;i++){

                  spanArr[i].className="";

              }

              if(spanIndex<0){

                  spanIndex=spanArr.length-1;

              }

              spanArr[spanIndex].className="current";

                imgIndex--;

              if(imgIndex<0){

                  /*先移动到最后一张,然后imgindex的值取之前一张的索引值,然后在向前移动*/

                  ul.style.left = -imgWidth*(spanArr.length)+"px";

                  imgIndex = spanArr.length-1;

              }

              animate(ul,-imgIndex*imgWidth);

          }

          Right.onclick =function () {

              autoPlay();

          }


/*动画*/

function animate(ele,target) {

                clearInterval(ele.timer);/*清除定时器*/

                var step=target>ele.offsetLeft?10:-10;

                ele.timer=setInterval(function () {

                    ele.style.left=ele.offsetLeft+step+"px";

                    var delta=target-ele.offsetLeft;

                    if(Math.abs(delta)<=Math.abs(step)){

                        ele.style.left=target+"px";

                        clearInterval(ele.timer);

                    }

                },10)

            }

        }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容