JavaScriptで縦にテキストが自動スクロールする機能を実装しているのですが、テキストの長さによって挙動が変化します。
具体的には下記のHTMLにあるように、最後のテキストが長い場合にだけ1回目のテキストとかぶったり、またFirefoxだと動きがカクカクしたりという挙動の変化です。
html
1<div class="loopSlider" style="height: 100px;"> 2 <ul> 3 <li> 4 <a href="#">この1回目のテキストが2週目から挙動がおかしい。</a> 5 </li> 6 <li> 7 <a href="#">こんにちは。今日は良い天気ですね。</a> 8 </li> 9 <li> 10 <a href="#">この3回目のテキストが長い場合だけ、1回目のテキストにかぶって見えてしまう。たとえばこのように何行か続くくらい長い場合だけで、もし短ければかぶったりしない。</a> 11 </li> 12 </ul> 13</div>
javascript
1$(function(){ 2 var setElm = $('.loopSlider'), 3 slideSpeed = 2000; 4 5 setElm.each(function(){ 6 var self = $(this), 7 selfHeight = self.innerHeight(), 8 findUl = self.find('ul'), 9 findLi = findUl.find('li'), 10 listHeight = findLi.outerHeight(), 11 listCount = findLi.length, 12 loopHeight = listHeight * listCount; 13 14 findUl.wrapAll('<div class="loopSliderWrap" />'); 15 var selfWrap = self.find('.loopSliderWrap'); 16 17 if(loopHeight > selfHeight){ 18 findUl.css({height:loopHeight}).clone().appendTo(selfWrap); 19 20 selfWrap.css({height:loopHeight*2}); 21 22 function loopMove(){ 23 selfWrap.animate({top:'-' + (loopHeight) + 'px'},slideSpeed*listCount,'linear',function(){ 24 selfWrap.css({top:'0'}); 25 loopMove(); 26 }); 27 }; 28 loopMove(); 29 30 setElm.hover(function() { 31 selfWrap.pause(); 32 }, function() { 33 selfWrap.resume(); 34 }); 35 } 36 }); 37});
css
1.loopSlider { 2 margin: 0 auto; 3 text-align: left; 4 position: relative; 5 overflow: hidden; 6 background: #242424; 7 margin: 0 20px; 8 border-radius: 2px; 9 max-width: 250px; 10} 11.loopSliderWrap { 12 top: 0; 13 left: 0; 14 overflow: hidden; 15 position: absolute; 16} 17ul { 18 position: relative; 19 padding: 5px; 20} 21li { 22 margin: 0px 5px 5px 5px; 23 padding-bottom: 5px; 24} 25a { 26 color: #fff; 27 text-decoration: none; 28 display: block; 29} 30 31 32
原因と対策についてご意見頂戴できればと思い質問させて頂きました。
宜しくお願い致します。
よろしければ実際の挙動のサンプルがあるのでご覧になって下さい。
https://jsfiddle.net/k9qez6Lh/
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/27 07:18