2016-11-11 9 views
2

私は、実行中のテキストを実行するためにjquery animateを使用しようとしています。しかし、私はそれが無限ループで実行されるように見えることはできません。 https://jsfiddle.net/y9hvr9fa/1/jqueryを使用して無限ループをアニメーション化する方法は?

はそれを修正する方法を皆さん知っています:それは、常にこれはデモ..ですのみ

/* js: */ 
 

 
$(document).ready(function(){ 
 
    function scroll() { 
 
    $('.scroll').animate({ 
 
     right: $(document).width() 
 
    }, 8000, scroll); 
 
    } 
 
    scroll(); 
 
});
/* css: */ 
 

 
.scroll { 
 
    position: absolute; 
 
    right: -200px; 
 
    width: 200px; 
 
}
<!-- html: --> 
 

 
<div class="scroll">This text be scrollin'!</div>

を1回実行されますか?

+0

jqueryアニメーションを使用してマーキーを試してみたい – Coolguy

答えて

0

CSSオルタナティブ:

は、別の方法としては、このCodePenのようにCSSトランジションを使用することができます。 https://codepen.io/jamesbarnett/pen/kfmKa

より高度:

$(document).ready(function(){ 
 
    var scroller = $('#scroller'); // scroller $(Element) 
 
    var scrollerWidth = scroller.width(); // get its width 
 
    var scrollerXPos = window.innerWidth; // init position from window width 
 
    var speed = 1.5; 
 
    scroller.css('left', scrollerXPos); // set initial position 
 
    
 
    function moveLeft() { 
 
    \t if(scrollerXPos <= 0 - scrollerWidth) scrollerXPos = window.innerWidth; 
 
    \t scrollerXPos -= speed; 
 
     scroller.css('left', scrollerXPos); 
 
     window.requestAnimationFrame(moveLeft); 
 
    } 
 
\t \t window.requestAnimationFrame(moveLeft); 
 
});
.scroll { 
 
    display: block; 
 
    position: absolute; 
 
    overflow: visible; 
 
    white-space: nowrap; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="scroller" class="scroll">This text be scrollin'!</div>

テキストが今まで停止せずに左に実行されている

ダーティ液(私の元の答え):

この例では、これはクイックフィックスだろう。ここでは、テキストが常にその位置から開始するように指示します。 (タイムアップ実行された後 - それは画面を左にしているときだけである必要はないという意味)

$(document).ready(function(){ 
    function scroll() { 
     $('.scroll').css('right', '-200px').animate({ 
     right: $(document).width() 
     }, 8000, scroll); 
    } 
    scroll(); 
}); 
+0

左に数秒間消えてしまったようですが、右に再び現れます...それは左に消えてすぐに表示されますもう一度? – Coolguy

+0

うん、それは本当であり、それが私が「クイックフィックス」と呼んでいた理由です。あなたが作成した関数は、テキストを8秒間左に動かしてから停止させます。そのパスを再実行する方法について考える必要があります。私の編集を参照してください。私は、アニメーションを行うためにrequestAnimationFrame(ルックアップ)を使用し、また、正確な位置を制御します。次に、テキストの位置を確認し、テキストの位置を変更することができます。 – lynx

2

だからこれは私がやったことです:

  1. 事前計算$(document).width()水平スクロールが表示されたかのように、幅は幅がコンテンツとしてだけの長さであるので、あなたがscrollに設定したwidthを削除し、次の繰り返し

  2. に変更されます - あなたは、TeXを保つためにwhite-space:nowrapを与えなければならないだろうt行に

  3. animateでは、$('.scroll').outerWidth()

はデモは、以下を参照してください使用してscrollテキストの幅とupdate fiddle here

私はこの上でご意見を知ってみましょう

$(document).ready(function() { 
 
    
 
    // initialize 
 
    var $width = $(document).width(); 
 
    var $scrollWidth = $('.scroll').outerWidth(); 
 
    $('.scroll').css({'right': -$scrollWidth + 'px'}); 
 
    
 
    // animate 
 
    function scroll() { 
 
    $('.scroll').animate({ 
 
     right: $width 
 
    }, 8000, 'linear', function() { 
 
     $('.scroll').css({'right': -$scrollWidth + 'px'}); 
 
     scroll(); 
 
    }); 
 
    } 
 
    scroll(); 
 
});
body { 
 
    overflow: hidden; 
 
} 
 
.scroll { 
 
    position: absolute; 
 
    white-space: nowrap; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="scroll">This text be scrollin'!</div>
を使用しますありがとう!

+0

@Coolguyは、この点に関するあなたのご意見をお待ちしております。 – kukkuz

+0

いいえ、線形推移型を追加することもできます( ''}、8000、 'linear'、function(){... ')ので、より多くの文字が入りますテキスト – lynx

+0

@lynxそれを指摘してくれてありがとう - それは今より良く見える... :) – kukkuz

関連する問題