zoukankan      html  css  js  c++  java
  • banner无缝轮播【小封装】

    转载:http://www.qdfuns.com/notes/23446/d1691a1edf5685396813cc85ae6ab10f.html

    一直在重复的写banner,写了了好几个,然后每次写,不停的造轮子,然后渐渐的学会封装,虽然还是不太懂更深层次的东西,但在不断的进步中。

      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <meta charset="utf-8">
      5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
      6 <title>图片轮播</title>
      7 <meta name="description" content="">
      8 <meta name="keywords" content="">
      9 <link href="" rel="stylesheet">
     10 <style type="text/css">
     11     html,body{
     12         padding: 0;
     13         margin: 0;
     14     }
     15     ul,ul li{
     16         list-style: none;
     17         margin: 0;
     18         padding: 0;
     19     }
     20     .box{
     21     }
     22     
     23     #banner{
     24         position: relative;
     25         height:auto;
     26         overflow: hidden;
     27     }
     28     #banner ul{
     29         position:absolute;
     30     }
     31     #banner ul li{
     32         float: left;
     33     }
     34     #banner ul li img{
     35         width: 100%;
     36         height: 100%;
     37     }
     38     #banner #prevBtn,#banner #nextBtn{
     39         height:80px;
     40         width:30px;
     41         background:rgba(0,0,0,0.5);
     42         position:absolute;
     43         top:50%;
     44         margin-top:-40px;
     45         font-size:30px;
     46         line-height:80px;
     47         text-align:center;
     48         text-decoration:none;
     49         color:white;
     50         opacity: 0;
     51         transition: opacity 0.8s ease;
     52     }
     53     #banner #prevBtn{
     54         left:0;
     55     }
     56     #banner #nextBtn{
     57         right:0;
     58     }
     59     #banner:hover #prevBtn,#banner:hover #nextBtn{
     60         opacity: 1;
     61     }
     62     .dot{
     63         height:10px;
     64         width:10px;
     65         border-radius:10px;
     66         background:#2196f3;
     67         display:inline-block;
     68         margin:5px;
     69     }
     70     .on{
     71         background: #009688;
     72     }
     73 </style>
     74 </head>
     75 <body>
     76     <div class="box">
     77         <div id="banner">
     78             <ul id="banner-wrap">
     79                 <li>
     80                     <img src="http://www.zxhuan.com/wp-content/uploads/2016/02/img1.jpg">
     81                 </li>
     82                 <li>
     83                     <img src="http://www.zxhuan.com/wp-content/uploads/2016/02/img2.jpg">
     84                 </li>
     85                 <li>
     86                     <img src="http://www.zxhuan.com/wp-content/uploads/2016/02/img3.jpg">
     87                 </li>
     88                 <li>
     89                     <img src="http://www.zxhuan.com/wp-content/uploads/2016/02/img4.jpg">
     90                 </li>
     91                 <li>
     92                     <img src="http://www.zxhuan.com/wp-content/uploads/2016/02/img5.jpg">
     93                 </li>
     94             </ul>
     95         </div>
     96     </div>
     97     <script type="text/javascript" src='http://libs.baidu.com/jquery/2.0.0/jquery.js'></script>
     98     <script type="text/javascript">
     99         (function($,window,document,undefinen){
    100             $.fn.bannerSwiper=function(option){
    101                 this.default={
    102                     boxWrap:null,//必填
    103                     nextBtn:false,//是否往下启动按钮
    104                     prevBtn:false,//是否往上启动按钮
    105                     autoPlay:false,//是否启动自动播放
    106                     times:3000,//自动轮播的时间间隔,
    107                     speed:600,//点击按钮是切换的速度
    108                     circle:false,//是否启动小圆点
    109                     circleAlign:"center",//小圆点的对其方式
    110                     circleClick:false//小圆点是否可以点击
    111                 }
    112                 var self=this;
    113                 this.time=null;
    114                 this.options=$.extend({},this.default,option);
    115                 self.flag=true;
    116                 // 插件入口
    117                 this.init=function(){
    118                     this.bulid();
    119                 }
    120                 this.bulid=function(){
    121                     var self=this;
    122                     var wrap=self.options.boxWrap;
    123                     self.num=1;
    124                     self.nowTime=+new Date();
    125                     self.width=$(window).width();
    126                     var firstImg=$(wrap).find('li').first();
    127                     var lastImg=$(wrap).find('li').last();
    128                     $(wrap).append(firstImg.clone());
    129                     $(wrap).prepend(lastImg.clone());
    130                     self.length=$(wrap).find('li').length;
    131                     $(wrap).width(self.width*self.length);
    132                     $(wrap).find('li').width(self.width)
    133                     $(wrap).parent().height(480);
    134                     $(wrap).parent().width(self.width);
    135                     $(wrap).css({'left':-self.width*self.num})
    136                     // 是否启动自动轮播
    137                     if(self.options.autoPlay){
    138                         self.plays();
    139                     }
    140                     // 是否启动按钮
    141                     if(self.options.nextBtn){
    142                         self.NextBtn();
    143                     }
    144                     // 是否启动按钮
    145                     if(self.options.prevBtn){
    146                         self.prevBtn();
    147                     }
    148                     // 是否启动小圆点
    149                     if(self.options.circle){
    150                         self.circle()
    151                     }
    152                     if(self.options.circleClick){
    153                         self.clickCircle();
    154                     }
    155 
    156                 }
    157                 // // 鼠标移入时
    158                 self.on('mouseenter',function(){
    159                     self.stops();
    160                 })
    161                 // 鼠标移出时
    162                 self.on('mouseleave',function(){
    163                     self.plays(1);
    164                 })
    165 
    166                 // 开始计时器,自动轮播
    167                 this.plays=function(){
    168                     var self=this;
    169                     // self.stops();
    170                     console.log('play')
    171                     this.time=setInterval(function(){
    172                         self.go(-self.width)
    173                     },self.options.times);
    174                 }
    175                 // 停止计时器
    176                 this.stops=function(){
    177                     console.log('stop');
    178                     clearInterval(self.time)
    179                 }
    180                 // 手动创建按钮元素
    181                 this.prevBtn=function(){
    182                     var self=this;
    183                     var ele=$("<a href='javascript:;' id='prevBtn'><</a>");
    184                     self.append(ele);
    185                     $('#prevBtn').bind("click",function(){
    186                         self.go(self.width);
    187                     })
    188                 }
    189                 // 手动创建按钮元素
    190                 this.NextBtn=function(){
    191                     var self=this;
    192                     var ele=$("<a href='javascript:;' id='nextBtn'>></a>");
    193                     self.append(ele)
    194                     $('#nextBtn').bind("click",function(){
    195                         self.go(-self.width);
    196                     })
    197                 }
    198                 // 手动创建小圆点
    199                 this.circle=function(){
    200                     var self=this;
    201                     var ele=$('<div id="circle-wrap"></div>');
    202                     for(var i=0;i<self.length-2;i++){
    203                         $('<a class="dot" href="javascript:;"></a>').appendTo(ele)
    204                     }
    205                     ele.css({
    206                         "position":"absolute",
    207                         'bottom':'0',
    208                         'right':'0',
    209                         'left':'0',
    210                         'height':'20px',
    211                         "padding":"0 10px",
    212                         'text-align':self.options.circleAlign
    213                     });
    214                     self.append(ele);
    215                     self.playCircle(this.num-1);
    216                     
    217                 }
    218                 //小圆点指定当前项
    219                 this.playCircle=function(num){
    220                     $('#circle-wrap').find('.dot').eq(num).addClass('on').siblings().removeClass('on');
    221                 }
    222                 // 点击小圆点
    223                 this.clickCircle=function(){
    224                     var self=this;
    225                     $('#circle-wrap').find('.dot').on('click',function(){
    226                         self.num=$(this).index()+1;
    227                         self.circlePlay()
    228                     })
    229                 }
    230                 // 点击小圆点,图片切换
    231                 this.circlePlay=function(){
    232                     self.flag=true;
    233                     if(self.flag){
    234                         self.flag=false;
    235                         $(self.options.boxWrap).stop().animate({
    236                             'left':-self.num*self.width
    237                         },self.options.speed,function(){
    238                             self.flag=true;
    239                         });
    240                     }
    241                     self.playCircle(this.num-1);
    242                 }
    243                 // 点击按钮,进行轮播,以及自动轮播
    244                 this.go=function(offset){
    245                     var self=this;
    246                     if(self.flag){
    247                         self.flag=false;
    248                          if(offset<0){
    249                              self.num++;
    250                              if(self.num>self.length-2){
    251                                  self.num=1;
    252                              }
    253                          }
    254                          if(offset>0){
    255                              self.num--;
    256                              if(self.num<=0){
    257                                 self.num=self.length-2
    258                              }
    259                          }
    260                          if(Math.ceil($(self.options.boxWrap).position().left)<-(self.length-2)*self.width){
    261                             $(self.options.boxWrap).css({
    262                                 'left':-self.width
    263                             });
    264                         }
    265                         if(Math.ceil($(self.options.boxWrap).position().left)>-self.length){
    266                             $(self.options.boxWrap).css({
    267                                 'left':-self.width*(self.length-2)
    268                             })
    269                         }
    270                         self.playCircle(this.num-1);
    271                         $(self.options.boxWrap).stop().animate({
    272                             'left':$(self.options.boxWrap).position().left+offset
    273                         },self.options.speed,function(){
    274                             self.flag=true;
    275                         });
    276                     }
    277                 }
    278                 this.init();
    279             }
    280         })(jQuery,window,document)
    281         $('#banner').bannerSwiper({
    282             boxWrap:"#banner-wrap",
    283             nextBtn:true,
    284             prevBtn:true,
    285             autoPlay:true,
    286             circle:true,
    287             circleClick:true
    288         })
    289     </script>
    290 </body>
    291 </html>
  • 相关阅读:
    C#编程规范
    实用JavaScript代码库
    JSON入门
    asp.net基本事件
    iOS开发笔记 3、iOS基础
    iOS开发笔记 8、真机调试和发布软件
    数据同步框架MS Sync Framework不同场景使用例子和简要分析
    使用AppFabric 承载WCF和WF服务实例分析和说明
    .net程序员的iPhone开发MonoTouch
    iOS开发笔记 4、iOS中的Cocoa、设计模式等
  • 原文地址:https://www.cnblogs.com/y114113/p/6693864.html
Copyright © 2011-2022 走看看