Heim > Web-Frontend > js-Tutorial > Hauptteil

JavaScript implementiert einen nahtlosen Scrolleffekt für Text in vier Richtungen

PHPz
Freigeben: 2018-10-12 16:06:15
Original
1195 Leute haben es durchsucht

Dieser Artikel teilt Ihnen hauptsächlich den Code für steuerbares nahtloses Scrollen in vier Richtungen mit reinem JavaScript mit. Der Effekt ist sehr gut.

Erzielen Sie einen nahtlosen Text-Scroll-Effekt:

<!DOCTYPE html>  
<!--[if lt IE 7 ]> <html lang="zh-CN" class="ie6"> <![endif]-->
<!--[if IE 7 ]> <html lang="zh-CN" class="ie7"> <![endif]-->
<!--[if IE 8 ]> <html lang="zh-CN" class="ie8"> <![endif]-->
<!--[if IE 9 ]> <html lang="zh-CN" class="ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="zh-CN"> <!--<![endif]-->
<head>
<title>文字滚动</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<style type="text/css">
*{margin:0;padding:0;}
body{padding:20px;}
 .textbox{border:1px solid #ddd;width:auto;overflow: hidden;}
 .textbox ul{list-style: none;position: relative;}
 .textbox ul li{padding:5px 0;}
</style>
</head>
<body class="home-page">

  <p id="textbox" class="textbox">
    <ul>
      <li>汽车 | 运动B级车降3万5 </li>
      <li>家居 | 这么厉害的装修 女人真的要坐不住了</li>
      <li>教育 | 各省前三报考华工重奖10万元/人</li>
      <li>汽车 | 运动B级车降3万5 平行进口车加价11万</li>
      <li>健康 | 滥用激素酿苦果 14岁男孩10年不长个儿</li>
      <li>数码 | 最新手机报价 说好的宽带降费提速呢?</li>
      <li>汽车 | 平行进口车加价11万</li>
      <li>汽车 | 运动B级车降3万5</li>
      <li>汽车 | 平行进口车加价11万</li>
      <li>运动 | 恒大亚冠生死战 猜比分赢正版球衣</li>
    </ul>
    <a href="#" class="btnPrev">向左</a>
    <a href="#" class="btnNext">向右</a>
  </p>
  <br>
  <br>
  <p id="textbox2" class="textbox">
    <ul>
      <li>汽车 | 运动B级车降3万5 </li>
      <li>家居 | 这么厉害的装修 女人真的要坐不住了</li>
      <li>教育 | 各省前三报考华工重奖10万元/人</li>
      <li>汽车 | 运动B级车降3万5 平行进口车加价11万</li>
      <li>健康 | 滥用激素酿苦果 14岁男孩10年不长个儿</li>
      <li>数码 | 最新手机报价 说好的宽带降费提速呢?</li>
      <li>汽车 | 平行进口车加价11万</li>
      <li>汽车 | 运动B级车降3万5</li>
      <li>汽车 | 平行进口车加价11万</li>
      <li>运动 | 恒大亚冠生死战 猜比分赢正版球衣</li>
    </ul>
    <a href="#" class="btnPrev">向上</a>
    <a href="#" class="btnNext">向下</a>
  </p>
  <script type="text/javascript" src="script/jquery-1.11.1.min.js"></script>
  <script type="text/javascript">

    //四方向无缝滚动
    scroll(&#39;#textbox&#39;,{vis:2,btnHidden:false,dir:&#39;prev&#39;,type:&#39;h&#39;});
    scroll(&#39;#textbox2&#39;,{vis:3,btnHidden:false,dir:&#39;prev&#39;,type:&#39;v&#39;});

    function scroll(container,options){
      var box = $(container);
      var boxUl = box.find(&#39;ul&#39;).eq(0);
      var LiHeight = 0; //不包含克隆li列表高度
      var cloneLiHeight = 0; //包含克隆li列表高度
      var LiWidth = 0; //不包含克隆li列表宽度
      var cloneLiWidth = 0; //包含克隆li列表宽度
      var Lis = boxUl.children();
      var btnPrev = box.find(&#39;.btnPrev&#39;);
      var btnNext = box.find(&#39;.btnNext&#39;);

      //默认参数
      var defult= {
        vis : 2, //显示个数
        autoPlay:true, //自动播放
        speed :50, //滚动速度
        dir:&#39;prev&#39;, //滚动方向
        btnHidden:false, //按钮是否隐藏
        type:&#39;v&#39; // 水平或者垂直方向

      };
      var opt = $.extend({},defult,options);


      //构建DOM结构
      var lastClone=0; //最后克隆元素
      var lastCloneHeight=0;//最后克隆元素高度
      var allCloneHeight=0;//全部克隆元素总高度
      var lastCloneWidth=0;
      var allCloneWidth=0;
      var visHeight=0; //可视高度
      var visWidth=0;
      var boxUl_wrap;

      if(opt.type === "v"){ //垂直方向
        Lis.each(function(){
          $(this).height($(this).height());
          LiHeight += $(this).outerHeight(true);
        });
        lastClone= boxUl.children(&#39;:last&#39;).clone().addClass(&#39;clone&#39;).prependTo(boxUl);
        lastCloneHeight = lastClone.outerHeight(true);
        allCloneHeight = lastClone.outerHeight(true);

        for(var i = 0; i < opt.vis ; i++){
          Lis.eq(i).clone().addClass(&#39;clone&#39;).appendTo(boxUl);
          allCloneHeight += Lis.eq(i).outerHeight(true);
        }

        visHeight = allCloneHeight - lastCloneHeight;
        cloneLiHeight = LiHeight + allCloneHeight;
        
        boxUl_wrap = $(&#39;<p></p>&#39;).css({&#39;width&#39;:&#39;100%&#39;,&#39;height&#39;:visHeight,&#39;overflow&#39;:&#39;hidden&#39;,&#39;position&#39;:&#39;relative&#39;}).attr(&#39;id&#39;,&#39;ulWrap&#39;);
        boxUl.css({&#39;height&#39;:cloneLiHeight,&#39;top&#39;:-lastCloneHeight}).wrap(boxUl_wrap);

      }else if(opt.type ==="h"){ //水平方向
        Lis.css({&#39;whiteSpace&#39;:&#39;nowrap&#39;,&#39;float&#39;:&#39;left&#39;,&#39;paddingRight&#39;:&#39;10px&#39;});
        Lis.each(function(){
          $(this).width($(this).width());
          LiWidth += $(this).outerWidth(true);
        });

        lastClone= boxUl.children(&#39;:last&#39;).clone().addClass(&#39;clone&#39;).prependTo(boxUl);
        lastCloneWidth= lastClone.outerWidth(true);
        allCloneWidth = lastClone.outerWidth(true);

        for(var j = 0; j < opt.vis ; j++){
          Lis.eq(j).clone().addClass(&#39;clone&#39;).appendTo(boxUl);
          allCloneWidth += Lis.eq(j).outerWidth(true);
        }
        visHeight = Lis.eq(0).outerHeight(true);
        visWidth = allCloneWidth - lastCloneWidth;
        cloneLiWidth = LiWidth + allCloneWidth;
        
        boxUl_wrap = $(&#39;<p></p>&#39;).css({&#39;width&#39;:visWidth,&#39;height&#39;:visHeight,&#39;overflow&#39;:&#39;hidden&#39;,&#39;position&#39;:&#39;relative&#39;}).attr(&#39;id&#39;,&#39;ulWrap&#39;);
        boxUl.css({&#39;width&#39;:cloneLiWidth,&#39;left&#39;:-lastCloneWidth}).wrap(boxUl_wrap);
        box.css({&#39;width&#39;:visWidth});
      }


      //添加事件处理
      var timer = null;
      var scrollTop = function(){
        clearInterval(timer);
          timer = setInterval(function(){
            var tmp = parseInt(boxUl.css(&#39;top&#39;).replace(&#39;px&#39;,""));
            tmp--;
            boxUl.animate({&#39;top&#39;:tmp},0,function(){
              if(tmp <= -(LiHeight + lastCloneHeight)){
                boxUl.css(&#39;top&#39;,-lastCloneHeight);
              }
            });
          },opt.speed);
      };

      var scrollDown = function(){
        clearInterval(timer);
          timer = setInterval(function(){
            var tmp = parseInt(boxUl.css(&#39;top&#39;).replace(&#39;px&#39;,""));
            tmp++;
            boxUl.animate({&#39;top&#39;:tmp},0,function(){
              if(tmp >= 0){
                boxUl.css(&#39;top&#39;,-(LiHeight));
              }
            });
          },opt.speed);
      };

      var scrollLeft = function(){
        clearInterval(timer);
          timer = setInterval(function(){
            var tmp = parseInt(boxUl.css(&#39;left&#39;).replace(&#39;px&#39;,""));
            tmp--;
            boxUl.animate({&#39;left&#39;:tmp},0,function(){
              if(tmp <= -(LiWidth + lastCloneWidth)){
                boxUl.css(&#39;left&#39;,-(lastCloneWidth));
              }
            });
          },opt.speed);
      };
      
      var scrollRight = function(){
        clearInterval(timer);
          timer = setInterval(function(){
            var tmp = parseInt(boxUl.css(&#39;left&#39;).replace(&#39;px&#39;,""));
            tmp++;
            boxUl.animate({&#39;left&#39;:tmp},0,function(){
              if(tmp >= 0){
                boxUl.css(&#39;left&#39;,-(LiWidth));
              }
            });
          },opt.speed);
      };

      var scrollType = function(type,dir){
        if(Lis.length >= opt.vis){ //显示个数不能多于列表个数,否则不显示效果
          var sdir = typeof dir!=="undefined" ? dir : opt.dir;
          switch(type){
            case "v":
              if(sdir == "prev"){scrollTop();}else{scrollDown();}
              break;
            case "h":
              if(sdir == "prev"){scrollLeft();}else{scrollRight();}
          }
        }
      };


      if(opt.autoPlay){
        scrollType(opt.type);
      }

      //添加事件处理
      box.find(&#39;#ulWrap&#39;).hover(function(){
        clearInterval(timer);
      },function(){
        scrollType(opt.type);
      });

      //按钮是否隐藏
      if(!opt.btnHidden){

        btnPrev.unbind(&#39;mouseover&#39;);
        btnNext.unbind(&#39;mouseover&#39;);

        btnPrev.mouseover(function(){
          scrollType(opt.type,"prev");
        });
        btnNext.mouseover(function(){
          scrollType(opt.type,"next");
        });
      }else{
        btnPrev.hide();
        btnNext.hide();
      }

    }
  </script>
</body>
</html>
Nach dem Login kopieren

Einige Probleme:

Kein Problem beim lokalen Testen, aber durch das Dokument danach .write() gibt den Code ein und führt ihn aus. Es wird ein Problem geben, die Höhe() von li im vertikalen Modus zu erhalten. Der Grund ist unbekannt und sehr rätselhaft..

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er Ihnen allen gefällt.

Weitere verwandte Tutorials finden Sie unter JavaScript-Grundlagen-Tutorial

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage