zoukankan      html  css  js  c++  java
  • 轮播图原生js实现和jquery实现和js面向对象方式实现

    原生JS实现

    html:

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <title>rotate</title>
            <link rel="stylesheet" href="css/index.css" />
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                    list-style: none;
                }
    
            </style>
            <script type="text/javascript" src="js/index.js"></script>
        </head>
        <body>
        <div id="rotateImg">
            <div id="imgcontainer">
                <ul>
                    <li><a href="#"><img src="img/ppt/Familia--Stark.gif" alt="" /></a></li>
                    <li><a href="#"><img src="img/ppt/game-of-thrones-deaths-09.jpg" alt="" /></a></li>
                    <li><a href="#"><img src="img/ppt/margaery-and-sansa.jpg" alt="" /></a></li>
                    <li><a href="#"><img src="img/ppt/Robb-Stark-Game-Of-Thrones.jpg" alt="" /></a></li>
                    <li><a href="#"><img src="img/ppt/starks.jpg" alt="" /></a></li>
                    <li><a href="#"><img src="img/ppt/game-of-thrones-has-been-an-integral-part.jpg" alt="" /></a></li>
                    
                </ul>
            </div>
            <ul>
               
            </ul>
            <div class="arrows">
                <div class="prev"><</div>
                <div class="next">></div>
            </div>
        </div>
    
        </body>
    </html>

    css:

    #rotateImg{
        width: 400px;
        height: 220px;
        margin:100px auto;
        position: relative;
        font:12px helvetica;
        overflow: hidden;
    }
    img{
        width: 400px;
        height: 220px;
    }
    #rotateImg>ul{
        position: absolute;
        bottom:15px;
        left:50%;
        margin-left:-60px;
    }
    #rotateImg>ul>li{
    
        float: left;
        /*list-style: none;*/
        cursor: pointer;
        width: 16px;
        height: 16px;
        margin-right:10px;
        text-align: center;
        line-height: 16px;
        border-radius: 8px;
        background: #fff;
    }
    #rotateImg>ul>li.light{
        background:red;
        color:#fff;
    }
    #imgcontainer{
        width: 100%;
    }
    #imgcontainer>ul{
        width: 1000%;
        height: 220px;
        list-style: none;
        position: absolute;
    }
    #imgcontainer>ul li{
        float:left;
    }
    .arrows{
        position: absolute;
        width: 100%;
        height: 40px;
        top:50%;
        margin-top:-20px;
        display: none;
        color: red;
    }
    .arrows .prev, .arrows .next{
        height: 40px;
        width: 40px;
        line-height: 40px;
        text-align: center;
        font:600 30px/40px "simsun";
        background:rgba(0,0,0,0.2);
        cursor: pointer;
    }
    .arrows .prev{
        float:left;
       
    }
    .arrows .next{
        float:right;
        
    }

    javascript:

    window.onload=function(){
        move("rotateImg");
        
    }
    
    
    
    function animation(obj,target){
        var speed;
        clearInterval(obj.timer);
        obj.timer=setInterval(function(){
            speed = (target - obj.offsetLeft)/10;
            speed = (speed>0?Math.ceil(speed):Math.floor(speed));
            obj.style.left = obj.offsetLeft+speed+"px";
            if(obj.offsetLeft==target){
                clearInterval(obj.timer);
            }
        }, 20)
    }
    function move(id){
    
        var rotateImg = document.getElementById(id);
        var imgUl = rotateImg.children[0].children[0];
        var imgList=imgUl.children;
        var dotUl = rotateImg.children[1];
        var arrows = rotateImg.children[2];
        var prev = arrows.children[0];
        var next = arrows.children[1];
        var width = rotateImg.offsetWidth;
        var num = 0;
        //clone first image
        var newLiFirstImgClone = imgUl.children[0].cloneNode(true);
        imgUl.appendChild(newLiFirstImgClone);
        
      
        
        //1、create dot according to number of images and append it 
        for(var i=1;i<imgList.length;i++){
            var newDot = document.createElement("li");
            newDot.innerHTML = i;
            dotUl.appendChild(newDot);
        }
        var dotLiArray = dotUl.children;
        
        //light first dot
        light(num);
        //2 click dot,transform image and light dot
        for(var k =0;k<dotLiArray.length;k++){
            dotLiArray[k].index = k;
            dotLiArray[k].onclick=function(){
                num = this.index;
                light(num);
                animation(imgUl,-num*width);
            }
        }
        
        function light(index){
        for(var j=0;j<dotLiArray.length;j++){
            dotLiArray[j].className="";
        }
        dotLiArray[index].className = "light";
        }
        
        // 3、next 
        next.onclick=autoplay;
        function autoplay(){
            num++;
            if(num==imgUl.children.length-1){
                light(0);
                //if img comes to the clone img,light the first dot
            }else if(num==imgUl.children.length){
                //if img is in the end ,set position to second img in a flash
                imgUl.style.left=0;
                num = 1;
                light(num);
                
            }else{
                light(num);
            }
            animation(imgUl,-num*width);
        }
        //4、prevent
        prev.onclick=function(){
            num--;
            if(num==-1){
                //if image comes to the end then transform it before the clone image
                imgUl.style.left=-width*(imgUl.children.length-1)+"px";
                //change img position suddenly
                num = imgUl.children.length-2;
            }
            light(num)
            animation(imgUl,-num*width);
        }
       
        //5 when mouse move over elements,stop rotate and show arrow
        rotateImg.onmouseover=function(){
            clearInterval(rotateImg.timer);
            arrows.style.display="block";
        }
        //6 when mouse out star rotate and hide arrow
    
        rotateImg.onmouseout=function(){
            clearInterval(rotateImg.timer);
            arrows.style.display="none";
            rotateImg.timer = setInterval(function(){
                autoplay();
            }, 1000)
        }
        
        //clearInterval and set original state as autoplay
        clearInterval(rotateImg.timer);
        rotateImg.timer = setInterval(function(){
                autoplay();
        }, 1000)
    
    }

    面向对象的javascript实现:

    window.onload = function() {
        var ar = ['img/wallPaper/v2-9f779d41608f6b4b62c75b597dde9f1e_b.jpg', 'img/wallPaper/starks.jpg'];
        //    new Move('img/wallPaper/v2-9f779d41608f6b4b62c75b597dde9f1e_b.jpg','img/wallPaper/starks.jpg','img/wallPaper/mygit.PNG');
        new Move(ar);
    }
    
    function animation(obj, target) {
        var speed;
        clearInterval(obj.timer);
        obj.timer = setInterval(function() {
            speed = (target - obj.offsetLeft) / 10;
            speed = (speed > 0 ? Math.ceil(speed) : Math.floor(speed));
            obj.style.left = obj.offsetLeft + speed + "px";
            if(obj.offsetLeft == target) {
                clearInterval(obj.timer);
            }
        }, 20)
    }
    
    function Move() {
    
        this.imgArr = [];
        if(Array.isArray(arguments[0])) {
            console.log('is array');
            this.imgArr = arguments[0];
        } else {
            if(arguments.length <= 1) {
                alert('请指定至少两张图片');
            }
            for(var a = 0; a < arguments.length; a++) {
                this.imgArr.push(arguments[a]);
            }
        }
    
        this.makeDiv();
    
        var rotateImg = document.getElementById('rotateImg');
        this.rotateImg = rotateImg;
        this.imgUl = rotateImg.children[0].children[0];
        this.imgList = rotateImg.children[0].children[0].children;
        this.dotUl = rotateImg.children[1];
        this.arrows = rotateImg.children[2];
        this.prev = this.arrows.children[0];
        this.next = this.arrows.children[1];
        this.width = rotateImg.offsetWidth;
        this.num = 0;
        //clone first image
        var newLiFirstImgClone = this.imgUl.children[0].cloneNode(true);
        this.imgUl.appendChild(newLiFirstImgClone);
    
        //1、create dot according to number of images and append it 
        for(var i = 1; i < this.imgList.length; i++) {
            var newDot = document.createElement("li");
            newDot.innerHTML = i;
            this.dotUl.appendChild(newDot);
        }
        var _this = this;
        this.dotLiArray = this.dotUl.children;
        this.light(this.num);
    
        //2 click dot,transform image and light dot
        for(var k = 0; k < this.dotLiArray.length; k++) {
            this.dotLiArray[k].index = k;
            this.dotLiArray[k].onclick = function() {
                _this.num = this.index;
                _this.light(_this.num);
                animation(_this.imgUl, -_this.num * _this.width);
            }
        }
        //3 next
        this.next.onclick = function() {
            _this.autoplay();
        }
        //自动播放
        rotateImg.timer = setInterval(function() {
    
            _this.autoplay(this.num);
        }, 1000);
        //4、previous
        this.prev.onclick = function() {
            _this.movePrev();
        }
        //5 when mouse move over elements,stop rotate and show arrow
        rotateImg.onmouseover = function() {
            _this.moveOver();
        }
        //6 when mouse out star rotate and hide arrow
        rotateImg.onmouseout = function() {
            _this.moveOut();
        }
    }
    Move.prototype.light = function(index) {
        for(var j = 0; j < this.dotLiArray.length; j++) {
            this.dotLiArray[j].className = "";
        }
        this.dotLiArray[index].className = "light";
    }
    Move.prototype.autoplay = function(num) {
        this.num++;
        if(this.num == this.imgUl.children.length - 1) {
            this.light(0);
            //if img comes to the clone img,light the first dot
        } else if(this.num == this.imgUl.children.length) {
            //if img is in the end ,set position to second img in a flash
            this.imgUl.style.left = 0;
            this.num = 1;
            this.light(this.num);
    
        } else {
            this.light(this.num);
        }
        animation(this.imgUl, -this.num * this.width);
    }
    Move.prototype.movePrev = function() {
        this.num--;
        if(this.num == -1) {
            //if image comes to the end then transform it before the clone image
            this.imgUl.style.left = -this.width * (this.imgUl.children.length - 1) + "px";
            //change img position suddenly
            this.num = this.imgUl.children.length - 2;
        }
        this.light(this.num)
        animation(this.imgUl, -this.num * this.width);
    }
    Move.prototype.moveOver = function() {
        clearInterval(this.rotateImg.timer);
        this.arrows.style.display = "block";
    }
    Move.prototype.moveOut = function() {
        clearInterval(this.rotateImg.timer);
        var this1 = this;
        this.arrows.style.display = "none";
        this.rotateImg.timer = setInterval(function() {
            this1.autoplay(this1.num);
        }, 1000)
    }
    
    Move.prototype.makeDiv = function() {
    
        var div = document.createElement('div');
        var str = '';
        for(var i = 0; i < this.imgArr.length; i++) {
            str += '<li><a href="#"><img src="' + this.imgArr[i] + '" alt="" /></a></li>'
        }
        var rlis = str;
        var slide = '    <div id="rotateImg"><div id="imgcontainer"><ul>' + rlis + '</ul></div><ul></ul><div class="arrows"><div class="prev"><</div><div class="next">></div></div></div>';
        div.innerHTML = slide;
        document.body.append(div);
    }
    
    



    <!DOCTYPE html>
    <html lang="en">
    
        <head>
            <meta charset="utf-8">
            <title>rotate</title>
            <style type="text/css">
                * {
                    margin: 0;
                    padding: 0;
                    list-style: none;
                }
                
                #rotateImg {
                    width: 400px;
                    height: 220px;
                    margin: 100px auto;
                    position: relative;
                    font: 12px helvetica;
                    overflow: hidden;
                }
                
                img {
                    width: 400px;
                    height: 220px;
                }
                
                #rotateImg>ul {
                    position: absolute;
                    bottom: 15px;
                    left: 50%;
                    margin-left: -60px;
                }
                
                #rotateImg>ul>li {
                    float: left;
                    /*list-style: none;*/
                    cursor: pointer;
                    width: 16px;
                    height: 16px;
                    margin-right: 10px;
                    text-align: center;
                    line-height: 16px;
                    border-radius: 8px;
                    background: #fff;
                }
                
                #rotateImg>ul>li.light {
                    background: red;
                    color: #fff;
                }
                
                #imgcontainer {
                    width: 100%;
                }
                
                #imgcontainer>ul {
                    width: 1000%;
                    height: 220px;
                    list-style: none;
                    position: absolute;
                }
                
                #imgcontainer>ul li {
                    float: left;
                }
                
                .arrows {
                    position: absolute;
                    width: 100%;
                    height: 40px;
                    top: 50%;
                    margin-top: -20px;
                    display: none;
                    color: red;
                }
                
                .arrows .prev,
                .arrows .next {
                    height: 40px;
                    width: 40px;
                    line-height: 40px;
                    text-align: center;
                    font: 600 30px/40px "simsun";
                    background: rgba(0, 0, 0, 0.2);
                    cursor: pointer;
                }
                
                .arrows .prev {
                    float: left;
                }
                
                .arrows .next {
                    float: right;
                }
            </style>
            <script type="text/javascript" src="js/lanquery.js">
            </script>
        </head>
    
        <body>
            
        </body>
    
    </html>

    继承一个子轮播图:

    <!DOCTYPE html>
    <html lang="en">
    
        <head>
            <meta charset="utf-8">
            <title>test</title>
    
            <link rel="stylesheet" type="text/css" href="css/dialog.css" />
            <link rel="stylesheet" href="css/slideImg.css" />
            <script type="text/javascript">
                window.onload = function() {
                    var ar = ['img/wallPaper/v2-9f779d41608f6b4b62c75b597dde9f1e_b.jpg', 'img/wallPaper/starks.jpg','img/wallPaper/mygit.PNG','img/wallPaper/v2-3622d29e9ad7936ab3a869d438aad028_b.jpg'];
                    //    new Move('img/wallPaper/v2-9f779d41608f6b4b62c75b597dde9f1e_b.jpg','img/wallPaper/starks.jpg','img/wallPaper/mygit.PNG');
                    //                new Move(ar);
    
                    function SubMove(id) {
                        Move.call(this, id);
                    }
                    //                SubMove.prototype = new Move();
                    for(var i in Move.prototype) {
                        SubMove.prototype[i] = Move.prototype[i];
                    }
                    SubMove.prototype.moveOut = function() {
                        clearInterval(this.rotateImg.timer);
                        var this1 = this;
                        this.arrows.style.display = "none";
                        this.rotateImg.timer = setInterval(function() {
                            this1.autoplay(this1.num);
                        }, 3000)
                    }
                    new SubMove(ar);
                }
            </script>
            <script type="text/javascript" src="js/lanquery.js"></script>
        </head>
    
        <body>
        </body>
    
    </html>

    jquery实现:

    <!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset="UTF-8"> 
    <title>jquery轮播效果图 </title> 
    <script type="text/javascript" src="js/jquery.js"></script> 
    <style type="text/css"> 
     * { 
      padding: 0px; 
      margin: 0px; 
     } 
     a { 
      text-decoration: none; 
     } 
     ul { 
      list-style: outside none none; 
     } 
     .slider, .slider-panel img, .slider-extra { 
      width: 650px; 
      height: 413px; 
     } 
     .slider { 
      text-align: center; 
      margin: 30px auto; 
      position: relative; 
     } 
     .slider-panel, .slider-nav, .slider-pre, .slider-next { 
      position: absolute; 
      z-index: 8; 
     } 
     .slider-panel { 
      position: absolute; 
     } 
     .slider-panel img { 
      border: none; 
     } 
     .slider-extra { 
      position: relative; 
     } 
     .slider-nav { 
      margin-left: -51px; 
      position: absolute; 
      left: 50%; 
      bottom: 4px; 
     } 
     .slider-nav li { 
      background: #ccc; 
      border-radius: 50%; 
      color: #fff; 
      cursor: pointer; 
      margin: 0 2px; 
      overflow: hidden; 
      text-align: center; 
      display: inline-block; 
      height: 18px; 
      line-height: 18px; 
      width: 18px; 
     } 
     .slider-nav .slider-item-selected { 
      background: lightcoral; 
     } 
     .slider-page a{ 
      background: rgba(0, 0, 0, 0.2); 
      color: #fff; 
      text-align: center; 
      display: block; 
      font-family: "helvetica"; 
      font-size: 22px; 
      width: 28px; 
      height: 62px; 
      line-height: 62px; 
      margin-top: -31px; 
      position: absolute; 
      top: 50%; 
     } 
     .slider-page a:hover { 
      background: rgba(0, 0, 0, 0.4); 
     } 
     .slider-next { 
      left: 100%; 
      margin-left: -28px; 
     } 
    </style> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var currentIndex = 0;
      var  interval;//定时器
      var hasStarted = false; //是否已经开始轮播 
      var t = 2000; //轮播时间间隔 
      var length = $('.slider-panel').length; 
      //将除了第一张图片隐藏 
      $('.slider-panel:not(:first)').hide(); 
      //将第一个小原点slider-item设置为点亮状态 
      $('.slider-item:first').addClass('slider-item-selected'); 
      //隐藏向前、向后翻按钮 
      $('.slider-page').hide(); 
      //鼠标hover时显示向前、向后翻按钮,停止滑动,鼠标离开时隐藏向前、向后翻按钮,开始滑动 
      $('.slider-panel, .slider-pre, .slider-next').hover(function() { 
       stop(); 
       $('.slider-page').show(); 
      }, function() { 
       $('.slider-page').hide(); 
       start(); 
      }); 
      //小圆点hover
      $('.slider-item').hover(function(e) { 
       stop(); //停止轮播
       //轮播到当前hover圆点对应图片
       var preIndex = $(".slider-item").filter(".slider-item-selected").index(); 
       currentIndex = $(this).index(); 
       play(preIndex, currentIndex); 
      }, function() { //hover结束重新轮播
       start(); 
      }); 
      //绑定onclick事件
      $('.slider-pre').on('click', function() { 
       pre(); 
      }); 
      $('.slider-next').unbind('click'); 
      $('.slider-next').bind('click', function() { 
       next(); 
      }); 
      /** 
       * 向前翻页 
       */
      function pre() { 
       var preIndex = currentIndex; 
       currentIndex = (--currentIndex + length) % length; 
       //length为图片数,当--currentIndex为-1时将其currentIndex设为length-1
    // console.log(currentIndex);
       play(preIndex, currentIndex); 
      } 
      /** 
       * 向后翻页 
       */
      function next() { 
       var preIndex = currentIndex; 
       currentIndex = ++currentIndex % length; 
       play(preIndex, currentIndex); 
      } 
      /** 
       * 从preIndex页翻到currentIndex页 
       * preIndex 整数,翻页的起始页 
       * currentIndex 整数,翻到的那页 
       */
      function play(preIndex, currentIndex) { 
       $('.slider-panel').eq(preIndex).fadeOut(500) 
        .parent().children().eq(currentIndex).fadeIn(1000); 
        //点亮小圆点
       $('.slider-item').removeClass('slider-item-selected'); 
       $('.slider-item').eq(currentIndex).addClass('slider-item-selected'); 
      } 
      /** 
       * 开始轮播 默认向后轮播next
       */
      function start() { 
       if(!hasStarted) { 
        hasStarted = true; 
        
        clearInterval(interval);
        interval = setInterval(next, t); 
       } 
      } 
      /** 
       * 停止轮播 
       */
      function stop() { 
       clearInterval(interval); //清定时器
       hasStarted = false; 
      } 
      //开始轮播 
      start(); 
     }); 
    </script> 
    </head> 
    <body> 
     <div class="slider"> 
      <ul class="slider-main"> 
       <li class="slider-panel"> 
        <img src="img/game-of-thrones-deaths-09.jpg"/>
       </li> 
       <li class="slider-panel"> 
        <img src="img/game-of-thrones-deaths-24.jpg"/>
           
       </li> 
       <li class="slider-panel"> 
        <img src="img/game-of-thrones-has-been-an-integral-part.jpg"/>
           
       </li> 
       <li class="slider-panel"> 
        <img src="img/image.jpg"/>
       </li> 
      </ul> 
      <div class="slider-extra"> 
       <ul class="slider-nav"> 
        <li class="slider-item">1</li> 
        <li class="slider-item">2</li> 
        <li class="slider-item">3</li> 
        <li class="slider-item">4</li> 
       </ul> 
       <div class="slider-page"> 
        <a class="slider-pre" href="#"><</a> 
        <a class="slider-next" href="#">></a> 
       </div> 
      </div> 
     </div> 
    </body> 
    </html>
  • 相关阅读:
    [SDOI2016]排列计数
    Broken robot
    环路运输
    naptime
    Accumulation Degree
    选课
    没有上司的舞会
    金字塔
    Polygon
    石子合并
  • 原文地址:https://www.cnblogs.com/rlann/p/6233152.html
Copyright © 2011-2022 走看看