zoukankan      html  css  js  c++  java
  • js 实现slider封装

    1)记得动画类代码要在启动新的动画时删除旧的动画

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <title>淘宝首页图片轮播效果</title>
        <style>
          <!--
          * {margin: 0;padding:0;}
          body {background: #222;}
          ol {list-style: none;}
          img {border: 0 none;}
          #slider,#sliderVertical {
           border: 1px solid #F60;
            490px;
           height: 170px;
           overflow: hidden;
           position: relative;
           margin: 2em auto;
          }
          #slider .player {
           /* 2450px;
           height: 850px;*/
           position: absolute;
           top: 0px;
           left: 0px;
           2450px;
          }
          #sliderVertical .player{
            position: absolute;
            top: 0px;
            left: 0;
          }
          #slider .player li,#sliderVertical .player li {
           float:left;
            490px;
           height: 170px;
          }
          #slider .btns,#sliderVertical .btns {
           position: absolute;
           right: 10px;
           bottom: 5px;
           height: 30px;
          }
          #slider .btns li,#sliderVertical .btns li {
           font: 13px Tahoma, Arial, 宋体, sans-serif;
           float: left;
           margin: 0 3px;
           border: 1px solid #F60;
           background-color: #FFF;
           color: #CC937A;
           opacity: .8;
           cursor: pointer;
            20px;
           height: 20px;
           line-height: 19px;
           text-align: center;
           -moz-border-radius: 10px;
           -webkit-border-radius: 10px;
           border-radius: 10px;
          }
          #slider .btns li.active ,#sliderVertical .btns li.active{
           background: #F60;
           color: #FFF;
           font-weight: bold;
           opacity: 1;
          }
          -->
          </style>
      <body>
        <div id="slider">
         <ol class="player">
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292153222974220.jpg" alt=""></a></li>
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292153150002983.jpg" alt=""></a></li>
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292153066259174.jpg" alt=""></a></li>
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292152557505797.gif" alt=""></a></li>
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292152484534559.jpg" alt=""></a></li>
         </ol>
         <ol class="btns">
          <li>1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
         </ol>
        </div>
        <div id="sliderVertical">
         <ol class="player">
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292152484534559.jpg" alt=""></a></li>
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292152557505797.gif" alt=""></a></li>
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292153066259174.jpg" alt=""></a></li>
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292153150002983.jpg" alt=""></a></li>
          <li><a href=""><img src="//images0.cnblogs.com/i/386011/201403/292153222974220.jpg" alt=""></a></li>
         </ol>
         <ol class="btns">
          <li>1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
         </ol>
        </div>
      </body>
      <script>
          function animate(o,start,alter,dur,fx) {
          /*
           * 功能说明:
           * 设置动画
           * o:要设置动画的对象
           * start:开始的对象
           * alter:总的对象
           * dur:动画持续多长时间
           * fx:动画类型
           */
           var curTime=0;
           var t=setInterval(function () {
            if (curTime>=dur) clearInterval(t);
            for (var i in start) {
              o.style[i]=fx(start[i],alter[i],curTime,dur)+"px";
            }
            curTime+=40;
           },40);
           return function () {clearInterval(t);};
          };
          var Tween = {
          /*
           * 功能说明:
           * 加速运动
           * curTime:当前时间,即动画已经进行了多长时间,开始时间为0
           * start:开始值
           * alter:总的变化量
           * dur:动画持续多长时间
           */
           Linear:function (start,alter,curTime,dur) {return start+curTime/dur*alter;},//最简单的线性变化,即匀速运动
           Quad:{//二次方缓动
            easeIn:function (start,alter,curTime,dur) {
             return start+Math.pow(curTime/dur,2)*alter;
            },
            easeOut:function (start,alter,curTime,dur) {
             var progress =curTime/dur;
             return start-(Math.pow(progress,2)-2*progress)*alter;
            },
            easeInOut:function (start,alter,curTime,dur) {
             var progress =curTime/dur*2;
             return (progress<1?Math.pow(progress,2):-((--progress)*(progress-2) - 1))*alter/2+start;
            }
           },
          };
    
          function $(id){
                return document.getElementById(id);
          }
    
          function getByClass(className,context){
                context=context||document;
                if(context.getElementsByClassName){
                      return context.getElementsByClassName(className);
                }else{
                      var nodes=[];
                      var tags=context.getElementsByTagName('*');
                      for(var i=0,l=tags.length;i<l;i++){
                            if(hasClass(tags[i],className))nodes.push(tags[i]);
                      }
                }
                return nodes;
          }
    
          function hasClass(node,className){
                var names=node.className.split(/s+/);
                for(var i=0,l=names.length;i<l;i++){
                      if(names[i]==className)return true;
                }
                return false;
          }
    
          function Slider(options){
            /*参数说明:
            *player:要运行的图片容器,必须
            *distance:图片位移,必须(垂直的话则为图片高度,水平的话则为图片宽度)
            *dur:动画时间,默认1500ms
            *btns:按钮数组,必须
            *hoverClass:悬浮按钮样式,默认‘active’
            *isVertical:true/false,默认垂直
            *fx:动画效果,默认Tween.Quad.easeOut
            */
            this.player=options.player;
            this.btns=options.btns;
            this.num=this.btns.length;
            this.distance=options.distance;
            this.dur=options.dur||1500;
            this.hoverClass=options.hoverClass||'active';
            this.fx=options.fx||Tween.Quad.easeOut;
            this.isVertical=options.isVertical;
            this.current=0;
            this.intervalId=0;
            
            for(var i=0,l=this.btns.length;i<l;i++){
              var t=this.btns[i];
              t.index=i;
              var _this=this;
              t.onmouseover=function(){
                _this.stop();
                _this.invoke(this.index);
              }
              t.onmouseout=function(){
                _this.startPlay();
              }
            }
          };
    
          Slider.prototype.next=function(){
                this.invoke(this.current+1);
          };
    
          Slider.prototype.stop=function(){
              clearInterval(this.intervalId);
          }
    
          Slider.prototype.invoke=function(index){
            this.btns[this.current].className='';
            this.current=index;
            if(this.current>=this.num)this.current=0;
            var startVal = parseInt(this.isVertical?this.player.style.top:this.player.style.left) || 0;
            var alterVal = (parseInt(-startVal - this.distance * this.current));
            this.animateIterval && this.animateIterval();//修正快速切换时闪动
            this.animateIterval=this.isVertical?animate(this.player,{top:startVal},{top:alterVal},1000,this.fx):animate(this.player,{left:startVal},{left:alterVal},1000,this.fx)
            this.btns[this.current%this.num].className=this.hoverClass;
          }
    
          Slider.prototype.startPlay=function(){
                var _this=this;
                this.btns[this.current].className=this.hoverClass;
                this.intervalId=setInterval(function(){_this.next()},this.dur);
          }
    
          var options={};
          var slider=$('slider');
          options.player=getByClass('player',slider)[0];
          options.btns=getByClass('btns',slider)[0].getElementsByTagName('li');
          options.isVertical=false;
          options.distance=490;
          options.dur=2500;
          options.fx=Tween.Quad.easeInOut;
          
          var mySlider=new Slider(options);
          mySlider.startPlay();
    
          var options={
            player:getByClass('player',$('sliderVertical'))[0],
            btns:getByClass('btns',$('sliderVertical'))[0].getElementsByTagName('li'),
            isVertical:true,
            dur:2500,
            distance:170
          }
          var myVerticalSlider=new Slider(options);
          myVerticalSlider.startPlay();
      </script>
    </html>

     

  • 相关阅读:
    Nginx学习---Nginx的详解_【all】
    Nginx学习---企业级nginx环境搭建
    企业的批量分发的管理方案
    全网数据实时备份方案[inotify,sersync]
    搭建企业级全网数据定时备份方案[cron + rsync]2
    搭建企业级全网数据定时备份方案[cron + rsync]
    SSH连接不上
    ACC起来后,usb检测不到
    常用命令和配置文件位置
    Linux系统的信号详解
  • 原文地址:https://www.cnblogs.com/hugh2006/p/3633144.html
Copyright © 2011-2022 走看看