图片轮播效果 面向对象方法

/*广告图片数组*/
var imgs=[
{"img":"images/index/banner_01.jpg"},
  {"img":"images/index/banner_02.jpg"},
  {"img":"images/index/banner_03.jpg"},
  {"img":"images/index/banner_04.jpg"},
  {"img":"images/index/banner_05.jpg"},
];
var slider={
  LIWIDTH:670,//保存每个li的宽度
  $ulImgs:null,//保存id为imgs的ul
  $ulIdxs:null,//保存id为indexs的ul
  DURATION:500,//保存单次移动的时间
  WAIT:3000,//保存轮播的等待时间
  moved:0,//保存已经左移的li个数
  init(){
    var me=this;//留住this
    //选择id为imgs的ul保存到$ulImgs中
    me.$ulImgs=$("#imgs");
    //选择id为indexs的ul保存到$ulIdxs中
    me.$ulIdxs=$("#indexs");
    me.initView();//初始化界面
    me.autoMove();//启动自动轮播
    //当鼠标进入slider,停止轮播,当鼠标移出,再次启动
    $("#slider").hover(function(){
      me.$ulImgs.stop(true);
    },function(){
      me.autoMove();
    });
    //为ulImgs添加鼠标进入事件监听,只允许li>img响应事件
    me.$ulImgs.on("mouseover","li>img",function(e){
      var $tar=$(e.target);
      //获得当前img的下标
      var i=$tar.index("#imgs img");
      me.moved=i;//修改moved等于i
      me.moved==imgs.length&&(me.moved=0);
      //修改ulImgs的left为-moved*LIWIDTH
      me.$ulImgs.css("left",-me.moved*me.LIWIDTH);
      me.changeHover();//根据moved修改hover
    });
    //为ulIdxs添加鼠标进入事件,只允许li响应
    me.$ulIdxs.on("mouseover","li",function(e){
      var $tar=$(e.target);
      if(!$tar.is(".hover")){
        var endi=$tar.index("#indexs>li");
        var starti=$(".hover").index("#indexs>li");
        //修改moved为endi-starti
        me.moved+=(endi-starti);
        me.changeHover();//立刻修改hover
        //让$ulImgs移动到moved*LIWIDTH的位置
        me.$ulImgs.stop(true).animate({
          left:-me.moved*me.LIWIDTH
        },me.DURATION);
      }
    });
  },
  autoMove(){//自动轮播
    var me=this;
    me.moved++;
    //先等待WAIT,再移动到moved*LIWIDTH
    me.$ulImgs.animate({"null":1},me.WAIT,
              //delay(me.WAIT)
      function(){
        me.$ulImgs.animate({
          left:-me.moved*me.LIWIDTH
        },me.DURATION,function(){//本地移动后
          //如果moved等于imgs的个数
          if(me.moved==imgs.length){
            //将ulImgs的left归0
            me.$ulImgs.css("left",0);
            me.moved=0;//将moved归0
          }
          me.changeHover();//调整圆点
          me.autoMove();//再启动自动轮播
        });
    });
  },
  changeHover(){//根据moved调整圆点的hover
    //将ulIdxs中moved位置的圆点添加hover,去掉兄弟的hover
    this.$ulIdxs.children()
        .eq(this.moved).addClass("hover")
        .siblings().removeClass("hover");
  },
  initView(){//将imgs数组的内容生成页面元素
    //遍历imgs中每个img,同时声明空字符串htmlImgs和htmlIdxs
    for(var i=0,htmlImgs="",htmlIdxs="";
        i<imgs.length;
        i++){
      htmlImgs+=//向htmlImgs中拼接: 
        `<li><img src='${imgs[i].img}'></li>`
      htmlIdxs+=//向htmlIdxs中拼接:
        `<li>${i+1}</li>`
    }//(遍历结束)
    //设置$ulImgs的html内容为htmlImgs
    this.$ulImgs.html(htmlImgs)
    //设置$ulImgs的宽为imgs的元素个数*LIWIDTH
        .css("width",(imgs.length+1)*this.LIWIDTH);
    //在$ulImgs中追加一个第一个元素的clone
    this.$ulImgs.append(
      this.$ulImgs.children(":first").clone());
    //设置$ulIdxs的html内容为htmlIdxs
    this.$ulIdxs.html(htmlIdxs);
    //设置$ulIdxs中第1个li添加hover class
    this.$ulIdxs.children(":first")
                .addClass("hover");
  },
  
}
slider.init();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值