两边可预览的轮播

HTML

<!doctype html>
<html>

    <head>
        <meta charset="utf-8">
        <title>卡片旋转轮播</title>
        <link rel="stylesheet" type="text/css" href="statics/css/style.css" />
    </head>

    <body>
        <div id="banner">
            <div id="carousel">
                <img src="statics/images/1.png" data-url="#">
                <img src="statics/images/2.png" data-url="#">
                <img src="statics/images/3.png" data-url="#">
                <img src="statics/images/4.png" data-url="#">
                <img src="statics/images/5.png" data-url="#">
                <img src="statics/images/6.png" data-url="#">
                <img src="statics/images/7.png" data-url="#">
                <img src="statics/images/8.png" data-url="#">
            </div>
        </div>
        <script src="statics/js/jquery-1.11.0.js" type="text/javascript" charset="utf-8"></script>
        <script src="statics/js/slider.js" type="text/javascript" charset="utf-8"></script>
        <script>
            $(function() {
                $('#carousel').carousel({
                    curDisplay: 0, //默认索引
                    autoPlay: false, //是否自动播放
                    interval: 3000 //间隔时间
                });
            });
        </script>
    </body>

</html>

CSS

body {
    padding:0;
    margin:0;
    background:#fff;
}
body,html {
    height:100%
}
div,li,ul {
    padding:0;
    margin:0
}
img {
    vertical-align:top;
    border:0
}
li,ul {
    list-style:none;
    text-transform:capitalize
}
#banner {
    margin-bottom:-10px
}
#carousel {
    position:relative;
    z-index:2;
    margin-top:20px;
    transform-style:preserve-3d;
    perspective:800px
}
#carousel img {
    position:absolute;
    left:50%;
    top:50%;
    margin-left:-252px;
    transition:transform .5s ease-in-out;
    box-shadow:8px 8px 20px rgba(0,0,0,.2);
    cursor:pointer
}
#bannerNav {
    position:relative;
    margin-top:20px;
    height:10px;
    padding:10px 0;
    text-align:center
}
#bannerNav ul li {
    cursor:pointer;
    overflow:hidden;
    display:inline-block;
    width:22px;
    margin:0 2px
}
#bannerNav ul li a {
    margin:0 auto;
    display:block;
    width:6px;
    height:6px;
    vertical-align:top;
    border-radius:3px;
    background:#5e6671;
    font-size:0
}
#bannerNav ul li.on a,#bannerNav ul li:hover a {
    background:#00aeff
}
#bannerNav ul li.on a {
    width:20px
}

#carousel {
    height:400px
}
#carousel img {
    width:500px;
    border-radius: 10px;
    opacity: 0;
}
}

js

(function($, window, document, undefined) {
    var Carousel = function(elem, options) {
        this.defaults = {
            curDisplay: 0,
            autoPlay: false,
            interval: 3000
        };
        this.opts = $.extend({}, this.defaults, options);

        var self = this;
        this.$carousel = elem;
        this.$aImg = this.$carousel.find('img');

        this.imgLen = this.$aImg.length;
        this.curDisplay = this.opts.curDisplay;
        this.autoPlay = this.opts.autoPlay;
        this.viewWidth = $(window).width() / 2;
        this.b_switch = true;
        this.iNow = this.opts.curDisplay;
        this.timer = null;
        this.interval = this.opts.interval;
        // 生成小点点
        var htmlNav = "<ul>";
        for (var i = 0; i < this.imgLen; i++) {
            if (this.curDisplay == i) {
                htmlNav += "<li class=on><a>" + i + "</a></li>";
            } else {
                htmlNav += "<li><a>" + i + "</a></li>";
            }
        }
        htmlNav += "</ul>";
        this.$carousel.parent().append('<div id=bannerNav>' + htmlNav + '</div>');
        this.$aNav = this.$carousel.siblings('#bannerNav').find('ul li');
    };

    var outerWidth = parseInt(document.body.offsetWidth);
    var middleWidth = 1920;
    var _height = outerWidth >= middleWidth ? 380 : 300;
    var _slideHeight = outerWidth >= middleWidth ? 330 : 260;

    Carousel.prototype = {
        play: function() {
            if (this.autoPlay) {
                if (this.iNow === this.imgLen - 1) {
                    this.iNow = 0;
                } else {
                    this.iNow++;
                }

                this.movingNext(this.iNow);
            }
        },

        movingPrev: function(index) {
            this.curDisplay = index;

            this.initalCarousel();
        },

        movingNext: function(index) {
            this.curDisplay = index;

            this.initalCarousel();
        },

        initalCarousel: function() {
            var self = this;
            var half_imgLen = Math.floor(this.imgLen / 2);
            var leftNum, rightNum;

            var k = 0;
            for (var i = 0; i < half_imgLen; i++) {
                leftNum = this.curDisplay - i - 1;
                if (k == 0) {
                    this.$aImg.eq(leftNum).css({
                        transform: 'translateX(' + (-535 * (i + 1)) + 'px) translateZ(-120px)',
                        width:"auto",
                    }).animate({
                        height: _slideHeight + 'px',
                        marginTop: -_slideHeight / 2 + 'px',
                        opacity: '0.6'
                    }, 500);
                    this.$aImg.eq(leftNum).attr('onclick', null);

                    rightNum = this.curDisplay + i + 1;
                    if (rightNum > this.imgLen - 1) rightNum -= this.imgLen;
                    this.$aImg.eq(rightNum).css({
                        transform: 'translateX(' + (600 * (i + 1)) + 'px) translateZ(-120px) ',
                        width:"auto"
                    }).animate({
                        height: _slideHeight + 'px',
                        marginTop: -_slideHeight / 2 + 'px',
                        opacity: '0.6'
                    }, 500);
                    this.$aImg.eq(rightNum).attr('onclick', null);
                    k++;
                } else {
                    this.$aImg.eq(leftNum).css({
                        transform: 'translateX(0px) translateZ(-1000px) ',
                        zIndex:-1
                    });

                    rightNum = this.curDisplay + i + 1;
                    if (rightNum > this.imgLen - 1) rightNum -= this.imgLen;
                    this.$aImg.eq(rightNum).css({
                        transform: 'translateX(0px) translateZ(-1000px) ',
                        zIndex:-1
                    });
                }
                this.$aImg.removeClass('on');
                this.$aNav.removeClass('on');
            }

            var _href = 'location.href=' + "'" + this.$aImg.eq(this.curDisplay).attr('data-url') + "'";
            this.$aImg.eq(this.curDisplay).css({
                transform: 'translateZ(0px)',
                zIndex:99999
            }).animate({
                height: _height + 'px',
                marginTop: -_height / 2 + 'px',
                opacity: '1',
            }, 500).addClass('on').attr('onclick', _href);
            this.$aNav.eq(this.curDisplay).addClass('on');

            this.$carousel.on('webkitTransitionEnd', function() {
                self.b_switch = true;
            });
        },

        inital: function() {
            var self = this;

            this.initalCarousel();

            this.$aImg.on('click', function(ev) {
                if (self.b_switch && !$(this).hasClass('on')) {
                    self.iNow = $(this).index();
                    self.b_switch = false;

                    var direction = self.viewWidth < ev.clientX ? 'next' : 'prev';
                    var index = $(this).index();

                    if (direction === 'next') {
                        self.movingNext(index);
                    } else {
                        self.movingPrev(index);
                    }
                }
            }).hover(function() {
                clearInterval(self.timer);
            }, function() {
                self.timer = setInterval(function() {
                    self.play();
                }, self.interval);
            });
            this.$aNav.on('click', function(ev) {
                if (self.b_switch && !$(this).hasClass('on')) {
                    self.iNow = $(this).index();
                    self.b_switch = false;

                    var direction = self.viewWidth < ev.clientX ? 'next' : 'prev';
                    var index = $(this).index();

                    if (direction === 'next') {
                        self.movingNext(index);
                    } else {
                        self.movingPrev(index);
                    }
                }
            }).hover(function() {
                clearInterval(self.timer);
            }, function() {
                self.timer = setInterval(function() {
                    self.play();
                }, self.interval);
            });

            this.timer = setInterval(function() {
                self.play();
            }, this.interval);

            this.$carousel.on('selectstart', function() {
                return false;
            });
        },

        constructor: Carousel
    };

    $.fn.carousel = function(options) {
        var carousel = new Carousel(this, options);

        return carousel.inital();
    };

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

推荐阅读更多精彩内容