|
|

楼主 |
发表于 2023-5-22 07:58
|
显示全部楼层
本帖最后由 马黑黑 于 2023-5-22 08:18 编辑
代码
- <style>
- #mydiv {
- width: 600px;
- height: 400px;
- border: 1px solid gray;
- position: relative;
- margin: 20px auto;
- }
- .zi {
- position: absolute;
- width: 50px;
- height: 50px;
- text-align: center;
- font: bold 2em / 50px sans-serif;
- text-shadow: 1px 1px 2px #000;
- opacity: 0;
- transition: 0.1s;
- animation: output var(--tt) var(--delay) forwards;
- }
- @keyframes output {
- 0% { opacity: 0; }
- 95% { opacity: 0; }
- 100% { opacity: 1; }
- }
- </style>
- <div id="mydiv"></div>
- <script>
- let sstr = `白居易·忆江南\n\n江南好,\n风景旧曾谙。\n日出江花红胜火,\n春来江水绿如蓝。\n能不忆江南?`;
- let tt = 20;
- let output = (ele,str) => {
- ele.innerText = '';
- let lines = str.split('\n'), ziNum = 0, delay = 0.2;
- for(j = 0; j < lines.length; j ++) {
- let ar = lines[j].split('');
- for(k = 0; k < ar.length; k ++) {
- ziNum ++;
- let zi = document.createElement('span');
- zi.className = 'zi';
- zi.innerText = ar[k];
- zi.style.cssText += `
- left: ${k*40}px;
- top: ${j* 40}px;
- color: #${Math.random().toString(16).substr(-6)};
- --tt: ${ziNum * delay}s;
- --delay: ${ziNum * delay - delay}s;
- `;
- ele.appendChild(zi);
- }
- }
- tt = ziNum * delay * 2000 + 2000;
- };
- let update = () => {
- output(mydiv,sstr);
- setTimeout(() => { update(); }, tt);
- };
- setTimeout(update,100);
- </script>
复制代码
|
|