<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了js實現文字捲動的效果的具體程式碼,供大家參考,具體內容如下
在之前小編已經和大家介紹了一些常用的js動畫效果,在此,和大家介紹一種可能不太常用的動畫效果。該動畫效果與文字相關,且,雖然不常用,但幾乎每個人都見過它。相信大家都使用酷狗音樂或是網易雲音樂進行音樂的搜尋,聽鑑,那麼久一定會看到歌詞頁面中,歌詞捲動的效果。此動畫效果與其相同,但相對於這些音樂歌詞效果而言又有些不同,增加了文字豎直排列並且捲動的效果。
在介紹之前,先和大家一起了解一些文字垂直排列的方式:writing-mode屬性
1、取值:
(1)writing-mode:horizontal-tb | vertical-rl | vertical-lr | lr-tb | tb-rl
(2)相容寫法:-webkit-writing-mode:horizontal-tb | vertical-rl | vertical-lr | lr-tb | tb-rl
(注: lr-tb 和tb-rl在IE中不相容)
預設值:normal
適用於:除 table-row-group, table-column-group, table-row, table-column 之外的所有元素
繼承性:有
動畫性:否
計算值:特定值
2、writing-mode的取值介紹
(1)horizontal-tb:水平方向自上而下的書寫方式。即 left-right-top-bottom(類似IE私有值lr-tb)
(2)vertical-rl:垂直方向自右而左的書寫方式。即 top-bottom-right-left(類似IE私有值tb-rl)
(3)vertical-lr:垂直方向自左而右的書寫方式。即 top-bottom-left-right
(4)lr-tb:左-右,上-下。物件中的內容在水平方向上從左向右流入,後一行在前一行的下面。 所有的字形都是豎直向上的。這種佈局是羅馬語系使用的(IE)
(5)tb-rl:上-下,右-左。物件中的內容在垂直方向上從上向下流入,自右向左。後一豎行在前一豎行的左面。全形字元是(6)豎直向上的,半形字元如拉丁字母或片假名順時針旋轉90度。這種佈局是東亞語系通常使用的(IE)
html:
<body style="font-size: 12px;" > <section class="topBox"> <div class="topBoxTxt"> <ul class="txtBox" id="txtBox"> </ul> </div> </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"); }
其中捲動時有些小瑕疵,若想嘗試的朋友,就請自行修改,小編就提供幫助到此,還請記得引入jq檔案哦
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45