美文网首页
面向对象之轮播

面向对象之轮播

作者: 李永州的FE | 来源:发表于2017-06-26 13:27 被阅读0次

    轮播

    思路就是点击向右滑动时,使用animate让图片改变整个图片的位移,并且给计数器加一同时判断是不是滑到最后一个了,如果本身就是最后一个,则重新设置位移,最后还要设置移动后下面定位图片光标的栏目样式,自己写一个了轮播大概要多久可以试试
    <html><head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <title>轮播2</title>
        <style type="text/css">
            ul,li {
                list-style: none;
                margin: 0;
                padding: 0;
            }
    
            .carousel {
                position: relative;
                width: 300px;
                height: 200px;
                overflow: hidden;
            }
    
            .carousel .img-ct {
                position: absolute;
                /*height: 200px;
                width: 1200px;*/
            }
    
            .carousel .img-ct:after {
                content: '';
                display: block;
                clear: both;
            }
    
            .carousel .img-ct>li {
                float: left;
            }
    
            .carousel .img-ct img {
                width: 300px;
                height: 200px;
            }
    
            .carousel .btn {
                position: absolute;
                top: 50%;
                margin-top: -15px;
                width: 30px;
                height: 30px;
                text-align: center;
                line-height: 30px;
                font-size: 18px;
                text-decoration: none;
                color: #fff;
                border-radius: 50%;
                background-color: #333;
                opacity: 0.6;
                display: block;
            }
    
            .carousel .btn-pre {
                left: 10px;
            }
    
            .carousel .btn-next {
                right: 10px;
            }
    
            .carousel .bullet-ct {
                position: absolute;
                bottom: 20px;
                left: 0;
                right: 0;
                text-align: center;
            }
    
            .carousel .bullet {
                display: inline-block;
            }
    
            .carousel .bullet>li {
                display: inline-block;
                width: 20px;
                height: 6px;
                border-radius: 3px;
                background-color: #fff;
                margin: 0 5px;
                cursor: pointer;
            }
    
            .carousel .bullet .active {
                background-color: #666;
            }
        </style>
    </head>
    
    <body>
    
    <div class="carousel">
        <ul class="img-ct" style="width: 1800px; left: -300px;"><li data-index="3">
            <a href="">![4.jpg](https://img.haomeiwen.com/i6100377/2e0bb6957428dc88.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
        </li>
            <li data-index="0">
                <a href="">![1.jpg](https://img.haomeiwen.com/i6100377/368223ceb828440d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            </li>
            <li data-index="1">
                <a href="">![2.jpg](https://img.haomeiwen.com/i6100377/7dacea8360d1231d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            </li>
            <li data-index="2">
                <a href="">![3.jpg](https://img.haomeiwen.com/i6100377/dc7cf1481ba5eab8.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            </li>
            <li data-index="3">
                <a href="">![4.jpg](https://img.haomeiwen.com/i6100377/2e0bb6957428dc88.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            </li>
            <li data-index="0">
                <a href="">![1.jpg](https://img.haomeiwen.com/i6100377/368223ceb828440d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            </li></ul>
        <a class="btn btn-pre" href="#"><</a>
        <a class="btn btn-next" href="#">></a>
        <div class="bullet-ct">
            <ul class="bullet">
                <li class="active"></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </div>
    
    
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script type="text/javascript">
        var Carousel = (function(){
            function _Carousel($ct){
                this.$ct = $ct;
                this.init();
                this.bind();
            }
            _Carousel.prototype.init = function(){
                var $imgCt = this.$imgCt = this.$ct.find('.img-ct'),
                        $preBtn = this.$preBtn = this.$ct.find('.btn-pre'),
                        $nextBtn = this.$nextBtn = this.$ct.find('.btn-next'),
                        $bullet = this.$bullet = this.$ct.find('.bullet');
    
                var $firstImg = $imgCt.find('li').first(),
                        $lastImg = $imgCt.find('li').last();
    
                this.curPageIndex = 0;
                this.imgLength = $imgCt.children().length;
                this.isAnimate = false;
                this.imgWidth = $firstImg.width();
    
                $imgCt.prepend($lastImg.clone());
                $imgCt.append($firstImg.clone());
    
                $imgCt.width( this.imgWidth * $imgCt.children().length );
                $imgCt.css({"left":0-this.imgWidth});
            };
    
            _Carousel.prototype.bind = function(){
                var _this = this;
                this.$preBtn.on('click',function(e){
                    e.preventDefault();
                    _this.playPre();
                });
    
                this.$nextBtn.on('click',function(e){
                    e.preventDefault();
                    _this.playNext();
                });
    
                this.$bullet.on('click','li',function(e){
                    var idx = $(this).index();
                    if(idx>_this.curPageIndex){
                        _this.playNext(idx-_this.curPageIndex);
                    }else if (idx<_this.curPageIndex) {
                        _this.playPre(_this.curPageIndex-idx);
                    }
                })
            };
    
            _Carousel.prototype.playPre = function(idx){
                var _this = this,
                        idx = idx || 1;
                if(this.isAnimate) return;
                this.isAnimate = true;
                this.$imgCt.animate({
                    left:'+='+this.imgWidth*idx
                },function(){
                    _this.curPageIndex = (_this.imgLength+_this.curPageIndex-idx)%_this.imgLength;
                    _this.setBullet();
                    if(_this.curPageIndex === _this.imgLength-1){
                        _this.$imgCt.css({left:0-_this.imgWidth*_this.imgLength});
                    }
                });
                this.isAnimate = false;
    
            };
    
            _Carousel.prototype.playNext = function(idx){
                var _this = this,
                        idx = idx || 1;
                if(this.isAnimate) return;
                this.isAnimate = true;
                this.$imgCt.animate({
                    left:'-='+this.imgWidth*idx
                },function(){
                    _this.curPageIndex = (_this.curPageIndex+idx)%_this.imgLength;
                    _this.setBullet();
                    if(_this.curPageIndex === 0){
                        _this.$imgCt.css({left:0-_this.imgWidth});
                    }
                });
                this.isAnimate = false;
    
            };
    
            _Carousel.prototype.setBullet = function(){
                this.$bullet.children().removeClass('active')
                        .eq(this.curPageIndex).addClass('active')
            };
    
            return {
                init:function($ct){
                    $ct.each(function(index,node){
                        new _Carousel($(node));
                    })
                }
            }
        })();
    
        Carousel.init($('.carousel'));
        // new _Carousel($('._carousel').eq(0));
        // new _Carousel($('._carousel').eq(1));
    </script>
    
    
    </body></html>
    

    相关文章

      网友评论

          本文标题:面向对象之轮播

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