闲的无聊研究一下轮播图插件(一)

【autonomic learning】轮播图插件
jQuery方法:
方式有三种: 通过$.extend()来扩展jQuery; 通过$.fn 向jQuery添加新的方法; 通过$.widget()应用jQuery UI的部件工厂方式创建;

1.无缝滚动

;(function($){
   $.fn.scroll=function(options){
       var root=this,      //把当前对象div存入root中
           timer=[],      //计时器
           ultag=$('>ul',root),  //获取ul标签
           litag=$('>li',ultag), //li标签
           linum=litag.length,   //li个数
           lione=litag.first(),  //获取单个li   .first()获取匹配元素集合中第一个元素
           marquee,              //滚动器函数
           liunit,               //li宽或高
           ulunit,               //ul宽或高
           limit,               //root宽或高
           cssname,             //样式名称(横:margin-left;纵:margin-top)
           effect;             //动画效果(横:marginLeft;纵:marginTop)
       //默认配置
       var settings={
           speed:40,
           direction:"x"
       }
       //传入的options不为空合并参数
       if(options){
           $.extend({},settings,options);
       }
       //x
       if(settings.direction==="x"){
           limit=root.width();
           cssname="margin-left";
           liunit=lione.outerWidth(true);
           // 获取匹配元素集合中第一个元素的当前计算外部宽度(包括padding,border和可选的margin)  true的话包含margin
           ulunit=liunit*linum;
           effect={marginLeft:"-=1"};
           ultag.css({ width: ulunit }); //给ul设置宽
       }
       //y
       if(settings.direction==="y"){
        limit=root.height();
        cssname="margin-top";
        liunit=lione.outerHeight(true);
        ulunit=liunit*linum;
        effect={marginTop:"-=1"};
        ultag.css({ height: ulunit }); //给ul设置gao
    }
       //marquee
       marquee=function(){
           //.anmiate(效果,持续时间,回调函数)
           ultag.animate(effect,0,function(){
              //ul滚动的距离,取绝对值
              var distance = Math.abs(parseInt($(this).css(cssname),10));
              //如果滚动距离一旦大于单个li的长
              if(distance>liunit){
                  $(">li:first",$(this)).appendTo($(this));//把第一个li移到最后
                  $(this).css(cssname,0);//滚动距离归0
              }
           });
       }
       //.each()遍历一个jQuery对象,为每个匹配元素执行一个函数。
       return root.each(function(i){
           //ul长>root长时才进行滚动
           if(ulunit>limit){
               timer[i]=setInterval(marquee,settings.speed);
               //鼠标进入停止
               $(this).hover(function(){
                   clearInterval(timer[i]);
               },function(){
                   timer[i]=setInterval(marquee,settings.speed);
               });
           }
       });
   }
})(jQuery);

目前遇到的一个小问题:横向改纵向不能用!!求一下解决方法
学习自/墙裂推荐:https://www.cnblogs.com/similar/p/5904599.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值