美文网首页
无限轮播

无限轮播

作者: 流着万条永远的河 | 来源:发表于2017-11-02 01:53 被阅读0次

    demo
    轮播有好多种实现方法,当然,如果说是靠控制元素的隐藏消失和出现,这不算是轮播,轮播有种动起来的意思,就是要有一个窗口,有一个带状区块,一点一点从这个窗口移走,每次一动,窗口的展示内容就不一样的。
    比较简单的轮播就是从头移动到另一头,再移动的话,就突然移动到开头的那里,这里一直用这个带状元素的left的值操控的,所以它相对于那个父元素窗口是绝对定位的哦。它里面的子元素li,我用了浮动,然后把它的宽用Jquary计算出来,就是所有的li的宽的和了,这样它就成一个条了。
    演示就是,打开页面,然后看看页面是否禁止脚本了,允许这个脚本运行。
    然后是自动轮播的展示,点击下面的四个bar的任何一个,就停止自动轮播了。
    这个轮播主要是滚动的效果,效果用了animate的实现。
    然后会想到,我这个是四个图片轮播,从第一个滚到第四个,再滚就是第一个图了,怎么滚?在第四张图后面生成一个节点,这节点同第一个节点一样的,然后就到了第一张的画面了,但是实际上是第五张,但是,动画已经有了,animate运行了嘛,然后这里立刻把ul的left用JS的css设置为到第一张图出现的那个距离嘛,因为这样设置,没有动画的效果,跟就是在第五张一样的效果,又有了动画,又滚回了第一张的位置。
    同理,第一张在窗口,再按向前,应该是第四张出来的,这时候要有滚动的动画,用animate,所以也应该在第一张前面加一个节点,跟第四张的一样的。同理,这时候相当于-1的位子了,再滚就要出现第三张,所以也立刻操作ul的css的left,等同于第四张图出现在窗口的位置。然后,再向前就名正言顺了哦。
    这里写的是组件,是要复用的,所以,需要原型对象的知识,new一个出来,然后,把容器当成参数传进去,并设定值保存就可以了。
    我犯的错误:
    animate的应用,是异步的,但是代码中的一些处理就是需要动画执行完后再进行,否则就出错了,我调试了半天都查不出错哪里,最终对着对着才想明白的,这里就是要用animate里的回调函数写紧接着干什么的。
    代码:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>无限轮播</title>
        <style>
            html,
            body {
                padding: 0;
                margin: 0;
                box-sizing: border-box;
            }
            
            .box {
                position: relative;
                top: 100px;
                margin: 0 auto;
                width: 300px;
                height: 250px;
                border: 1px solid;
                overflow: hidden;
                margin-bottom: 30px;
            }
            
            .box ul {
                padding: 0;
                margin: 0;
                position: absolute;
            }
            
            .box li {
                list-style: none;
                float: left;
                width: 300px;
                height: 250px;
            }
            
            .box ul:after {
                content: '';
                display: block;
                clear: both;
            }
            
            .box a {
                text-decoration: none;
                display: block;
            }
            
            .box img {
                width: 300px;
                height: 250px;
            }
            
            .box span {
                font-size: 30px;
                display: block;
                width: 40px;
                height: 40px;
                line-height: 40px;
                color: cornflowerblue;
                position: absolute;
                font-weight: 900;
                margin-top: -15px;
                top: 50%;
                border: 1px solid #fff;
                border-radius: 50%;
                transition: all 1.2s;
                opacity: .6;
                text-align: center;
                cursor: pointer;
            }
            
            .box span:hover {
                color: antiquewhite;
                opacity: .9;
            }
            
            .pre {
                left: 30px;
            }
            
            .next {
                right: 30px;
            }
            
            .barbox {
                position: absolute;
                text-align: center;
                bottom: 40px;
                width: 100%;
            }
            
            .bar {
                display: inline-block;
                background: #000;
                border: 1px solid #fff;
                width: 25px;
                height: 5px;
                border-radius: 5px;
                opacity: 0.5;
                margin-right: 10px;
                transition: all 1.2s;
                cursor: pointer;
            }
            
            .bar:hover {
                opacity: 1;
            }
            
            .active {
                background: #fff;
            }
        </style>
        <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
    </head>
    
    <body>
        <div class="box">
            <ul>
                <li>
                    <a href="">![](http://img2.imgtn.bdimg.com/it/u=1455412770,187294946&fm=27&gp=0.jpg)</a>
                </li>
                <li>
                    <a href="">![](http://img0.imgtn.bdimg.com/it/u=3671900893,3681890145&fm=27&gp=0.jpg)</a>
                </li>
                <li>
                    <a href="">![](http://img4.imgtn.bdimg.com/it/u=4211669961,1732543913&fm=27&gp=0.jpg)</a>
                </li>
                <li>
                    <a href="">![](http://img4.imgtn.bdimg.com/it/u=2233906600,497902272&fm=27&gp=0.jpg)</a>
                </li>
            </ul>
            <span class="pre"><</span>
            <span class="next">></span>
            <div class="barbox">
                <div class="bar active"></div>
                <div class="bar"></div>
                <div class="bar"></div>
                <div class="bar"></div>
            </div>
        </div>
    
        <div class="box">
            <ul>
                <li>
                    <a href="">![](http://img0.imgtn.bdimg.com/it/u=2729574682,2195130672&fm=27&gp=0.jpg)</a>
                </li>
                <li>
                    <a href="">![](http://img3.imgtn.bdimg.com/it/u=2644098417,2855359270&fm=27&gp=0.jpg)</a>
                </li>
                <li>
                    <a href="">![](http://img1.imgtn.bdimg.com/it/u=4131356061,2801798504&fm=27&gp=0.jpg)</a>
                </li>
                <li>
                    <a href="">![](http://img1.imgtn.bdimg.com/it/u=1297186364,1913349851&fm=27&gp=0.jpg)</a>
                </li>
            </ul>
            <span class="pre"><</span>
            <span class="next">></span>
            <div class="barbox">
                <div class="bar active"></div>
                <div class="bar"></div>
                <div class="bar"></div>
                <div class="bar"></div>
            </div>
        </div>
        <script>
            function roll($box) {
                this.init($box)
                this.bind()
                this.autoplay()
            }
            roll.prototype = {
                init: function($box) {
                    this.$box = $box
                    this.index = 0
                    this.doing = false
                    this.liwid = this.$box.find('li').outerWidth(true)
                    this.licount = this.$box.find('li').length
                    this.$box.find('ul').append(this.$box.find('li').first().clone())
                    this.$box.find('ul').prepend(this.$box.find('li').last().clone())
                    this.$box.find('ul').width(this.liwid * (this.licount + 2))
                    this.$box.find('ul').css('left', -this.liwid)
                },
                bind: function() {
                    var self = this
                    this.$box.find('.next').on('click', function() {
                            console.log('nxt,,,')
                            self.playnext(1)
    
                        }),
                        this.$box.find('.pre').on('click', function() {
                            console.log('pre,,,')
                            self.playpre(1)
    
                        }),
                        this.$box.find('.bar').on('click', function() {
                            self.stopauto()
                            console.log($(this).index())
                            self.active($(this))
                            var index = $(this).index()
                            if (index > self.index) {
                                self.playnext(index - self.index)
                            } else if (index < self.index) {
                                self.playpre(self.index - index)
                            }
    
                        })
    
                },
                playnext: function(leng) {
                    var self = this
                    if (self.doing) return;
                    self.doing = true
                    self.$box.find('ul').animate({
                        left: '-=' + self.liwid * leng
                    }, function() {
                        self.index += leng
                        if (self.index === self.licount) {
                            self.$box.find('ul').css('left', -self.liwid)
                            self.index = 0
                        }
                        self.active(self.$box.find('.bar').eq(self.index))
                        self.doing = false
                    })
    
                },
                playpre: function(leng) {
                    var self = this
                    if (self.doing) return;
                    self.doing = true
                    self.$box.find('ul').animate({
                        left: '+=' + self.liwid * leng
                    }, function() {
                        self.index -= leng
                        if (self.index < 0) {
                            self.$box.find('ul').css('left', -self.liwid * self.licount)
                            self.index = self.licount - 1
                        }
                        //console.log(self.index)
                        self.active(self.$box.find('.bar').eq(self.index))
                        self.doing = false
                    })
                },
                active: function(node) {
                    node.addClass('active').siblings().removeClass('active')
                },
                autoplay: function() {
                    var self = this
                    self.clock = setInterval(function() {
                        self.playnext(1)
                    }, 1500)
                },
                stopauto: function() {
                    clearInterval(this.clock)
                }
            }
            new roll($('.box').eq(0))
            new roll($('.box').eq(1))
                /*function roll($box) {
                this.init($box)
                this.bind()
            }
            roll.prototype = {
                constructor: roll,
                init: function($box) {
                    this.$box = $box
                    this.$ul = this.$box.find('ul')
                    this.$pre = this.$box.find('.pre')
                    this.$next = this.$box.find('.next')
                    this.$li = this.$box.find('ul >li')
                    this.$bar = this.$box.find('.bar')
                    this.index = 0
                    this.$liwid = this.$li.outerWidth(true)
                    this.$licount = this.$li.length
                    this.$ul.append(this.$li.first().clone())
                    this.$ul.prepend(this.$li.last().clone())
                    this.$ul.width(this.$liwid * (this.$licount + 2))
                    this.$ul.css(
                        'left', -this.$liwid
                    )
    
    
                },
                bind: function() {
                    var self = this
                    this.$next.on('click', function() {
                        //console.log('next,,,')
                        self.playnext()
                    })
                    this.$pre.on('click', function() {
                        console.log('pre,,,')
                        self.playpre()
                    })
                    this.$bar.on('click', function() {
                        console.log($(this).index())
                        var index = $(this).index()
                        self.active($(this))
                        self.$ul.animate({
                            left: '-=' + self.$liwid * (index - self.index)
                        })
                        self.index = index
                    })
                },
                playnext: function() {
                    var self = this
                    console.log('eeee', self.$ul.css('left'))
                    self.$ul.animate({
                        left: '-=' + this.$liwid
                    })
                    self.index += 1
                        // console.log(self.index, self.$licount)
                    if (self.index === self.$licount) {
    
                        self.$ul.css({
                                left: '-' + self.$liwid
                            })
                            //self.$ul.css('left', -self.$liwid)
                        self.index = 0
                        console.log(self.index, self.$ul.css('left'))
    
                    }
                    self.active(self.$bar.eq(self.index))
                    console.log('eeee', self.$ul.css('left'))
                },
                playpre: function() {
                    var self = this
                    self.$ul.animate({
                        left: '+=' + this.$liwid
                    })
                    self.index -= 1
                    if (self.index = -1) {
                        self.$ul.css('left', self.$liwid * (self.$licount))
                        self.index = self.$licount - 1
                    }
                    self.active(self.$bar.eq(self.index))
                        //console.log(self.index, self.$licount)
                        //console.log('eeee', self.$ul.css('left'))
                },
                active: function(node) {
                    node.addClass('active').siblings().removeClass('active')
                }
            }
            new roll($('.box').eq(0))
            new roll($('.box').eq(1))*/
        </script>
    
    </body>
    
    </html>
    

    相关文章

      网友评论

          本文标题:无限轮播

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