美文网首页
Javascript专题(三)c.各种轮播--上下滚动轮播(面向

Javascript专题(三)c.各种轮播--上下滚动轮播(面向

作者: 海客无心 | 来源:发表于2017-04-15 16:23 被阅读0次
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        body,div,ul,li{margin: 0;padding: 0;list-style: none;}
        body{
            background: #000;
        }
        #box{
            margin: 10px auto;
            width: 492px;
            height: 172px;
            border: 8px solid #fff;
            border-radius: 5px; 

            position: relative;
        }
        #box .list{
            width: 490px;
            height: 170px;
            border: 1px solid blue;
            overflow: hidden;

            position: relative;
        }
        #box .list ul{
            position: absolute;
            top: 0;
            left: 0;
        }
        #box .list ul li{
            width: 490px;
            height: 170px;
            overflow: hidden;
        }
        #box .list-count{
            position: absolute;
            right: 0;
            bottom: 5px;
            cursor: pointer;
        }
        #box .list-count li{
            color: #fff;
            float: left;
            margin-right: 5px;
            border-radius: 5px;
            background: #f60;
            width: 20px;
            height: 20px;
            text-align: center;
            font: 12px/20px Arial;
            opacity: 0.7;
            filter: alpha(opacity=70);
        }
        #box .list-count li.current{
            opacity: 1;
            filter: alpha(opacity=100);
        }


    </style>
</head>
<body>
    <div id="box">
        <div class="list">
            <ul>
                <li>![](../image/landscape_map/055.jpg)</li>
                <li>![](../image/landscape_map/037.jpg)</li>
                <li>![](../image/landscape_map/039.jpg)</li>
                <li>![](../image/landscape_map/032.jpg)</li>
                <li>![](../image/landscape_map/038.jpg)</li>
            </ul>
        </div>
    </div>
</body>
<script type="text/javascript">
    //获取ID
    var $=function(id){return typeof id==="string"?document.getElementById(id):id}
    //获取tagName
    var $$=function(tagName,oParent){return (oParent||document).getElementsByTagName(tagName)}
    //自动轮播对象
    var obj_Auto=function(id){this.init(id)};
    obj_Auto.prototype={
        init:function(id){
            var oThis=this;
            this.oBox=$(id);
            this.oUl=$$("ul",this.oBox)[0];
            this.aImg=$$("img",this.oBox);
            this.createBtn();
            this.aBtn=$$("li",this.oCount);
            this.iNow=0;
            this.start_timer=null;
            this.auto_timer=null;
            for(var i=0;i<this.aBtn.length;i++){
                this.aBtn[i].index=i;
                this.aBtn[i].onmouseover=function(){
                    oThis.iNow=this.index;
                    //去除自动播放时的bug
                    //另外这两句话位置不能错了,否则就是上一次的Show了
                    oThis.Show();
                }
            }

            this.oBox.onmouseout=function(){
                oThis.Auto();
            }
            this.oBox.onmouseover=function(){
                clearInterval(oThis.auto_timer);
            }
            this.Auto();
        },
        createBtn:function(){
            //碎片传递,用于提升效率,将所有新增先添加到碎片中,防止多次渲染导致的流畅°下降问题。
            //另外一种方法:可以先扔进数组里,主要多次for循环的创建
            this.oCount=document.createElement("ul");
            this.oFrag=document.createDocumentFragment();
            this.oCount.className="list-count";
            for(var i=0;i<this.aImg.length;i++){
                var oLi=document.createElement("li");
                oLi.innerHTML=i+1;
                this.oFrag.appendChild(oLi);
            }
            this.oCount.appendChild(this.oFrag);
            this.oBox.appendChild(this.oCount);
        },
        Show:function(){
            for(var i=0;i<this.aBtn.length;i++)this.aBtn[i].className="";
            this.aBtn[this.iNow].className="current";
            this.Move(-this.iNow*this.aImg[0].offsetHeight);

        },
        Move:function(distance){
            var oThis=this;
            clearInterval(this.start_timer);
            this.start_timer=setInterval(function(){
                var speed=(distance-oThis.oUl.offsetTop)/10;
                speed=speed>0?Math.ceil(speed):Math.floor(speed);
                //若是不总是向上取整,会永远到不了
                oThis.oUl.offsetTop==distance?clearInterval(oThis.start_timer)
                :oThis.oUl.style.top=oThis.oUl.offsetTop+speed+"px";
            },30)
        },
        Auto:function(){
            var oThis=this;
            this.auto_timer= setInterval(function(){
                oThis.iNow<oThis.aImg.length-1? oThis.iNow++:(oThis.iNow=0);
                oThis.Show();
            },2000);
        }
    }


    new obj_Auto("box");//在没有创建之前不可以直接
</script>
</html>

相关文章

  • Javascript专题(三)c.各种轮播--上下滚动轮播(面向

  • Javascript专题(三)b.各种轮播和细节分析--上下滚动

    这一次,我们用原生JS实现上下滚动方式的轮播。 首先,我们来学习一下如何用JS创建HTML元素。 值得注意的是上方...

  • 轮播图

    1. 使用的第三方"SDCycleScrollView" 2. 文字轮播-垂直滚动示例 3. 图片轮播-水平滚动 ...

  • 任务27 - jquery实战 - 轮播

    代码 实现如下轮播效果 展示、代码 实现上述轮播效果,在一个页面有三个轮播 展示、代码 实现如下无限循环滚动轮播效...

  • 4.5左右轮播

    左右轮播有很多种实现方式 下面就先用 javaScript实现的一种吧:思路:想想轮播就是水平滚动的吧,这样的话就...

  • Slider - 轮播图

    简介: 用react开发的轮播图组件,支持淡入淡出、水平滚动、垂直滚动的无缝轮播效果。可自定义轮播内容。 API ...

  • 上下滚动轮播的实现

    上次写了一个关于左右滚动使用scroll实现的轮播,今天闲着没事也搞了一个上下滚动的字体轮播,大致思路是一样的。 ...

  • 无标题文章

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。它们各具特色,各有用处。 1.传统轮播图 第一步...

  • 自动滚动轮播

    自动滚动轮播

  • 轮播图

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。 1.传统轮播图 第一步,得到元素 第二步,设置...

网友评论

      本文标题:Javascript专题(三)c.各种轮播--上下滚动轮播(面向

      本文链接:https://www.haomeiwen.com/subject/uvanattx.html