• 更简单的轮播实现


    之前一篇实现的轮播虽然也简单易读,但图片是使用设置display为none来隐藏的,这种缺少动态的效果,今天重新写了一个,先看效果图:

    先说说大体设计思路,先看如下结构图:

    设计思路就是,先将image设置为浮动,然后在js中根据图片的数量来调整imagecontainer的宽度,这样实际上图片就是在一行中显示了,然后将carrousel的overflow设置为hidden,这样不是当前要显示的图片就会被隐藏,最后就是图片的移动是通过设置imagecontainer的marginleft为负值,来达到移动图片的效果,这样因为仅是改变了一个css值,所以就可以通过query的动画来增加一种平移的效果。想法是不是很好,^-^。

    而只要能够通过改变一个css属性就能达到移动图片的效果,那样写相关控制的逻辑就可以大大简化,相比于上次的实现就看起来好了很多。代码如下:

      1 <!DOCTYPE>
      2 <html>
      3 <head>
      4     <title>carrousel</title>
      5     <script src="js/jquery-3.2.1.js"></script>
      6     <style>
      7         body{
      8             padding:0px;
      9             margin:0px;
     10         }
     11         
     12         .lv-carrousel{
     13             width:100%;
     14             height:500px;
     15             margin:0 auto;
     16             overflow:hidden;
     17             font-size:0px;
     18             margin-top:-35px;
     19         }
     20         
     21         .lv-carrousel:before{
     22             content:"";
     23             display:block;
     24             height:35px;
     25             width:20px;
     26             background:url("images/left.png");
     27             position:relative;
     28             top:50%;
     29             margin-top:-17px;
     30             margin-left:10px;
     31         }
     32         
     33         .lv-carrousel:after{
     34             content:"";
     35             display:block;
     36             height:35px;
     37             width:20px;
     38             background:url("images/right.png");
     39             position:relative;
     40             bottom:50%;
     41             float:right;
     42             margin-right:10px;
     43         }
     44         
     45         
     46         
     47         .lv-carrousel-btn-group{
     48             height:20px;
     49             font-size:10px;
     50             background-color:green;
     51             text-align:center;
     52             margin-top:-55px;
     53         }
     54         
     55         .lv-carrousel-btn{
     56             height:10px;
     57             width:10px;
     58             background-color:#FFF;
     59             border-radius:5px;
     60             display:inline-block;
     61             margin:0 5px;
     62         }
     63         
     64         .lv-carrousel-btn.selected{
     65             width:20px;
     66         }
     67         
     68     </style>
     69     <script>
     70         var Carrousel = {
     71              0,
     72             height: 0,
     73             size:0,
     74             current:1,
     75             timer:null,
     76             direction:1,
     77             init: function(){
     78                 var _this = this;
     79                 this.width = $(".lv-carrousel").width();
     80                 this.height = $(".lv-carrousel").height();
     81                 $(".lv-carrousel-row img").height(this.height);
     82                 $(".lv-carrousel-row img").width(this.width);
     83                 this.size = $(".lv-carrousel-row img").length;
     84                 $(".lv-carrousel-row").width(this.width * this.size);
     85                 $(".lv-carrousel").append('<div class="lv-carrousel-btn-group"></div>');
     86                 for(var i=1; i<=this.size; i++){
     87                     $(".lv-carrousel-btn-group").append('<div class="lv-carrousel-btn"></div>');
     88                 }
     89                 $(".lv-carrousel-btn-group .lv-carrousel-btn:nth-child(" + _this.current + ")").addClass("selected");
     90                 $(".lv-carrousel-btn").click(function(){
     91                     $(".lv-carrousel-btn").removeClass("selected");
     92                     $(this).addClass("selected");
     93                     _this.change($(this).index() + 1);
     94                 });
     95                 $(".lv-carrousel").click(function(event){
     96                     var x = event.pageX;
     97                     if(x < 30){
     98                         if(_this.current > 1){
     99                             _this.change(_this.current - 1);
    100                         }
    101                     } else if(x>_this.width-30 && x<_this.width){
    102                         if(_this.current < _this.size){
    103                             _this.change(_this.current + 1);
    104                         }
    105                     }
    106                 });
    107                 $(".lv-carrousel").hover(function(){
    108                     _this.stop();
    109                 });
    110                 $(".lv-carrousel").mouseleave(function(){
    111                     _this.start();
    112                 });
    113                 this.start();
    114             },
    115             change:function(index){
    116                 if(index != this.current){
    117                     $(".lv-carrousel-row").animate({marginLeft: (-1 * this.width * (index-1) + "px")}, 500);
    118                     $(".lv-carrousel-btn").removeClass("selected");
    119                     $(".lv-carrousel-btn-group .lv-carrousel-btn:nth-child(" + index + ")").addClass("selected");
    120                     this.current = index;
    121                 }
    122             },
    123             start:function(){
    124                 var _this = this;
    125                 this.timer = setInterval(function(){
    126                     if(_this.direction == 1){
    127                         if(_this.current == _this.size){
    128                             _this.direction = -1;
    129                             _this.change(_this.current-1);
    130                         } else {
    131                             _this.change(_this.current+1);
    132                         }
    133                         
    134                     } else if(_this.direction == -1){
    135                         if(_this.current == 1){
    136                             _this.direction = 1;
    137                             _this.change(_this.current+1);
    138                         } else {
    139                             _this.change(_this.current-1);
    140                         }
    141                     }
    142                 }, 1000);
    143             },
    144             stop:function(){
    145                 clearInterval(this.timer);
    146             }
    147         };
    148         $(function(){
    149             Carrousel.init();
    150         });
    151     </script>
    152 </head>
    153 <body>
    154     <div class="lv-carrousel">
    155         <div class="lv-carrousel-row">
    156             <img src="images/1.jpg"/>
    157             <img src="images/2.jpg"/>
    158             <img src="images/3.jpg"/>
    159             <img src="images/4.jpg"/>
    160             <img src="images/5.jpg"/>
    161         </div>
    162     </div>
    163 </body>
    164 </html>
    carrousel.html

    如果你有更好的想法,欢迎讨论。

  • 相关阅读:
    基础:按值传递引用类型,按引用传递引用类新 细说并沉淀
    抽象与具体
    EXTJS 零星记录 VS2008中EXTJS智能提示插件
    javascript 与 coffescript来回转换:http://js2coffee.org/
    一个冒号引发的血案
    我基本上差不多做过了coffescript所做的事
    javascript的闭包中保存的是引用与循环中事件函数处理
    用webstorm调试coffeescript
    coffeescript 下的构造函数中如何使用return语句?
    coffeescript中的forin和forof
  • 原文地址:https://www.cnblogs.com/lvniao/p/9113089.html
Copyright © 2020-2023  润新知