ホームページ > 記事 > ウェブフロントエンド > JavaScriptを使用してテキストスクロールを実装する方法
JavaScript でテキスト スクロールを実装する方法: 1. HTML サンプル ファイルを作成します; 2. スクリプト タグを追加します; 3. "$(".txtBox").addClass("txtBox_4") を通じて縦書きテキストを実装します。 」 配置してスクロールするか、テキストを横に配置してスクロールするように設定するだけです。
この記事の動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
JavaScript を使用してテキストのスクロールを実現するにはどうすればよいですか?
テキストスクロール効果を実現するための js
## 小さな前よく使われるjsアニメーション効果はエディターで紹介しましたが、ここではあまり使われないかもしれないアニメーション効果を紹介します。このアニメーション効果はテキストに関連しており、一般的には使用されませんが、ほとんどの人が見たことがあります。 誰もが音楽を検索したり聴いたりするために Kugou Music や NetEase Cloud Music を使用していると思いますが、しばらくすると、歌詞ページで歌詞がスクロールする効果が確実に表示されるようになります。このアニメーション効果も同様ですが、これらの音楽の歌詞効果とは少し異なり、テキストの縦方向の配置やスクロールの効果が追加されています。 ( 1)書き込みモード: 水平-tb | 垂直-rl | 垂直-lr | lr-tb | tb-rl
(2) 互換性のある書き込み: -webkit-writing-mode: 水平-tb | 垂直-rl | 垂直 -lr | lr-tb | tb-rl
(注: lr-tb と tb-rl は IE では互換性がありません)
デフォルト値: 通常
適用対象: table-row-group、table - All を除く列グループ、表行、表列を除く要素
継承: あり
アニメーション: いいえ
計算値: 特定の値
(1)horizontal-tb: 水平方向のトップダウン記述方式。つまり、left-right-top-bottom (IE のプライベート値 lr-tb と同様)
(2)vertical-rl: 右から左への縦書き。つまり、top-bottom-right-left (IE のプライベート値 tb-rl と同様)
(3)vertical-lr: 左から右への縦書き。つまり、上-下-左-右
(4) lr-tb: 左-右、上-下。オブジェクトのコンテンツは左から右に水平に流れ、次の行が前の行の下になります。すべてのグリフは垂直かつ上向きです。このレイアウトはローマ字言語 (IE)
(5) tb-rl: 上-下、右-左で使用されます。オブジェクト内のコンテンツは、上から下、右から左に垂直に流れます。次の垂直行は、前の垂直行の左側にあります。全角文字は (6) 真上に向けられ、欧文やカタカナなどの半角文字は時計回りに 90 度回転されます。このレイアウトは東アジア言語で一般的に使用されます (IE)
<body style="font-size: 12px;" > <section class="topBox"> <p class="topBoxTxt"> <ul class="txtBox" id="txtBox"> </ul> </p> </section> <script type="text/javascript" src="index.js" ></script> <script> (function(win){ //文字水平排列滚动 // hor(); // horizontal(0); //文字垂直排列滚动 $(".txtBox").addClass("txtBox_4"); ver(); vertical(0); //移动端适配 var doc = win.document; var docEl = doc.documentElement; var tid; function refreshRem() { var width = docEl.getBoundingClientRect().width if (width > 768) { width = 768; } var rem = width / 7.5; docEl.style.fontSize = rem + 'px'; docEl.style.fontSize = rem + 'px'; docEl.style.fontSize = rem + 'px'; } win.addEventListener('resize', function() { clearTimeout(tid); tid = setTimeout(refreshRem, 300); }, false); win.addEventListener('pageshow', function(e) { if (e.persisted) { clearTimeout(tid); tid = setTimeout(refreshRem, 300); } }, false); refreshRem(); })(window); </script></body>css:
body,html{ width:100%; height:100%; position: relative; background: #232226; overflow-y: auto; overflow-x: hidden;}.topBox,.topBoxTxt{ width:100%; height:auto; position: relative;}.topBoxTxt{ text-align: center; height:auto;; color:#fff; font-size: 0.36rem; padding-top:55px;}.txtBox{ width: 5.6rem; height: 5.2rem; margin:0 auto; overflow-y: scroll;} .txtBox>li{ opacity: 0.5; height:0.74rem;} .txtBox>li:first-child{ padding-top:60px; }.txtBox>li.hotColor{ opacity: 1;}.txtBox_4{ width:4.6rem; height: 7.5rem; overflow-x: auto; white-space: nowrap; display: block;}.txtBox_4>li{ writing-mode:tb-rl; writing-mode:vertical-rl; -webkit-writing-mode: vertical-rl; height: 0; line-height: 0.75rem; word-wrap:break-word;}.txtBox_4>li{ width:0.4rem; text-align: center; margin:0 0.1rem; display: inline-table; position: relative;}index.js:
var freq=10;//滚动频率var fraction=9/10;// 水平文字高亮显示行在歌词显示区域中的固定位置百分比var frac=3/10;// 垂直文字高亮显示行在歌词显示区域中的固定位置百分比 var timer=true;//定时器var num=-1;//当前行下标var time;//滚动距离var eul = document.getElementById("txtBox");var lis=[ {"offset":3000, "text":"我总是轻描淡写告诉你我的愿望"}, {"offset":6000, "text":"也给你千言万语都说不尽的目光"}, {"offset":9000, "text":"这世界总有人在忙忙碌碌寻宝藏"}, {"offset":12000, "text":"却误了浮世骄阳也错过人间万象"}, {"offset":15000, "text":"古城里长桥上"}, {"offset":18000, "text":"人如海车成行"}, {"offset":21000, "text":"你笑得像光芒"}, {"offset":24000, "text":"蓦然把我照亮"}, {"offset":27000, "text":"风轻扬夏未央"}, {"offset":30000, "text":"林荫路单车响"}, {"offset":33000, "text":"原来所谓爱情"}, {"offset":36000, "text":"是这模样"}, {"offset":39000, "text":""} ]var count=lis.length%7+5;//文字水平排列滚动function hor(){ for (var i = 0; i <lis.length; i++) { var eli = document.createElement("li"); eli.innerText = lis[i].text; eul.appendChild(eli); } for(var j=0;j<count;j++){ var eli = document.createElement("li"); eli.innerText =""; eul.appendChild(eli); } }function horizontal(lineno){ common(lineno,horizontal); var scrollTop; var ep = eul.children[lineno]; if(30<ep.offsetTop<eul.clientHeight*fraction){ scrollTop=ep.offsetTop; }else if(ep.offsetTop>(eul.scrollHeight-eul.clientHeight*(1-fraction))){ scrollTop=eul.scrollHeight-eul.clientHeight; }else{ scrollTop=ep.offsetTop=eul.clientHeight*fraction; } // 如用户拖动滚动条导致当前显示行超出显示区域范围,下一行直接定位到当前显示行 if (eul.scrollTop > (scrollTop + eul.clientHeight*fraction)|| (eul.scrollTop + eul.clientHeight*fraction) < scrollTop){ eul.scrollTop = scrollTop; }else { var step = Math.ceil(Math.abs(eul.scrollTop - scrollTop)/(time/freq)); scrollT(eul.scrollTop, scrollTop, step); } }function scrollT(crt, dst, step){ if(Math.abs(crt - dst) < step){ return; } if(crt < dst){ eul.scrollTop += step; crt += step; } else { eul.scrollTop -= step; crt -= step; } setTimeout(scrollT.bind(this, crt, dst, step), freq); };//文字垂直排列滚动function ver(){ console.log(eul) for (var i = 0; i <lis.length; i++) { var eli = document.createElement("li"); eli.innerHTML = lis[i].text; eul.appendChild(eli); if(eli.innerText.length<15){ eli.style.marginBottom=(15-eli.innerText.length)+"em"; } } for(var j=0;j<count;j++){ var eli = document.createElement("li"); eli.innerText =""; eul.appendChild(eli); } }function vertical(lineno){ common(lineno,vertical); var scrollLeft; var ep = eul.children[lineno]; if (ep.offsetLeft < eul.clientWidth*frac){ scrollLeft = 0; } else if (ep.offsetLeft > (eul.scrollWidth - eul.clientWidth*(1-frac))){ scrollLeft = eul.scrollWidth - eul.clientWidth; } else { scrollLeft = ep.offsetLeft - eul.clientWidth*frac; } // 如用户拖动滚动条导致当前显示行超出显示区域范围,下一行直接定位到当前显示行 if (eul.scrollLeft > (scrollLeft + eul.clientWidth*frac)|| (eul.scrollLeft + eul.clientWidth*frac) < scrollLeft){ eul.scrollLeft = scrollLeft; } else { var step = Math.ceil(Math.abs(eul.scrollLeft - scrollLeft)/(time/freq)); scrollL(eul.scrollLeft, scrollLeft, step); } }function scrollL(crt, dst, step){ if(Math.abs(crt - dst) < step){ return; } if(crt < dst){ eul.scrollLeft += step; crt += step; } else { eul.scrollLeft -= step; crt -= step; } setTimeout(scrollL.bind(this, crt, dst, step), freq); }function common(lineno,fn){ if (lineno ==0) { time = lis[lineno].offset; } else { time = lis[lineno].offset - lis[lineno-1].offset; } timer = setTimeout(fn.bind(this, lineno+1), time); num=lineno; //若滚动到最后一行,则从头开始,并把每一行文字均取消高亮 if(lineno==lis.length-1){ for(var i=0;i<(eul.children).length-1;i++){ eul.children[i].setAttribute("class", ""); } lineno=0; timer = setTimeout(fn.bind(this, lineno), time); } if (lineno > 0) { eul.children[lineno-1].setAttribute("class", ""); } var ep = eul.children[lineno]; ep.setAttribute("class", "hotColor"); }推奨学習: 《
以上がJavaScriptを使用してテキストスクロールを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。