花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 346|回复: 138

JS+CSS实现逐行逐字输出诗词方法之一

[复制链接]
  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2023-5-22 07:57 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    评分

    参与人数 4威望 +130 金钱 +260 经验 +130 收起 理由
    梦缘 + 30 + 60 + 30 很给力!
    南无月 + 20 + 40 + 20 赞一个!
    醉美水芙蓉 + 30 + 60 + 30 赞一个!
    红影 + 50 + 100 + 50 赞一个!

    查看全部评分

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 07:58 | 显示全部楼层
    本帖最后由 马黑黑 于 2023-5-22 08:18 编辑

    代码
    1. <style>
    2. #mydiv {
    3.         width: 600px;
    4.         height: 400px;
    5.         border: 1px solid gray;
    6.         position: relative;
    7.         margin: 20px auto;
    8. }
    9. .zi {
    10.         position: absolute;
    11.         width: 50px;
    12.         height: 50px;
    13.         text-align: center;
    14.         font: bold 2em / 50px sans-serif;
    15.         text-shadow: 1px 1px 2px #000;
    16.         opacity: 0;
    17.         transition: 0.1s;
    18.         animation: output var(--tt) var(--delay) forwards;
    19. }
    20. @keyframes output {
    21.         0% { opacity: 0; }
    22.         95% { opacity: 0; }
    23.         100% { opacity: 1; }
    24. }
    25. </style>

    26. <div id="mydiv"></div>

    27. <script>
    28. let sstr = `白居易·忆江南\n\n江南好,\n风景旧曾谙。\n日出江花红胜火,\n春来江水绿如蓝。\n能不忆江南?`;
    29. let tt = 20;
    30. let output = (ele,str) => {
    31.         ele.innerText = '';
    32.         let lines = str.split('\n'), ziNum = 0, delay = 0.2;
    33.         for(j = 0; j < lines.length; j ++) {
    34.                 let ar = lines[j].split('');
    35.                 for(k = 0; k < ar.length; k ++) {
    36.                         ziNum ++;
    37.                         let zi = document.createElement('span');
    38.                         zi.className = 'zi';
    39.                         zi.innerText = ar[k];
    40.                         zi.style.cssText += `
    41.                                 left: ${k*40}px;
    42.                                 top: ${j* 40}px;
    43.                                 color: #${Math.random().toString(16).substr(-6)};
    44.                                 --tt: ${ziNum * delay}s;
    45.                                 --delay: ${ziNum * delay - delay}s;
    46.                         `;
    47.                         ele.appendChild(zi);
    48.                 }
    49.         }
    50.         tt = ziNum * delay * 2000 + 2000;
    51. };

    52. let update = () => {
    53.         output(mydiv,sstr);
    54.         setTimeout(() => { update(); }, tt);
    55. };

    56. setTimeout(update,100);

    57. </script>
    复制代码


    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 08:18 | 显示全部楼层
    本帖最后由 马黑黑 于 2023-5-22 08:22 编辑

    说明:

    一、思路

    与前几天演示的css-doodle排版相关的文章一样,使用元素的 opacity 属性令文本从完全透明到不透明的方式逐一呈现出来。

    二、CSS和HTML部分

    (一)需要一个父窗体作为文字输出场景(#mydiv 选择器);
    (二)文字个体(含标点)需要一个span元素装载(.zi 选择器);
    (三)需要一个关键帧动画(@keyframes 设定的 output)。调用关键帧动画的 animation 属性内设两个CSS变量:--tt 是单字运行关键帧动画总时长,--delay 是延时执行动画的时间。

    三、JS部分

    (一)变量 sstr 是字符串变量,是要输出的诗词,规范是断行使用 \n 符号;
    (二)变量 tt 是定时器运行周期时间(秒),预设的值随意,后面会根据字数重新计算赋值;
    (三)函数 output(ele,str) 用于清除、加载文本,其思路是,每次执行它,先清空父窗体所有内容,然后设置、装载文本,在设置文本时,给每一个 span 标签定义好 ① 位置 ② 随机文本颜色 ③ 两个CSS变量值,最后计算出 JS变量 tt 值。
    (四)函数 update() 运行(三)的函数,内置定时器 setTimeout 令其每隔 tt 毫秒循环执行 output(ele,str ) 函数,注意函数参数的代入值。

    (四)其他

    第60行启动一次 update() 函数,令程序进入工作状态。

    评分

    参与人数 1威望 +50 金钱 +100 经验 +50 收起 理由
    红影 + 50 + 100 + 50 赞一个!

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-11-28 23:48
  • 签到天数: 333 天

    [LV.8]以坛为家I

    356

    主题

    1900

    回帖

    1万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪神秘浪漫女儿情怀麦霸歌神天长地久

    发表于 2023-5-22 09:09 | 显示全部楼层
    黑黑老师厉害了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-26 08:26
  • 签到天数: 185 天

    [LV.7]常住居民III

    317

    主题

    3161

    回帖

    2万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪心曲飞扬飞龙在天王者至尊大将风范音画大师天籁妙音妙笔生花流光溢彩花潮贵宾

    发表于 2023-5-22 10:40 | 显示全部楼层
    谢谢老师教程!收藏学习备用!
    回复 支持 反对

    使用道具 举报

    醉美水芙蓉 该用户已被删除
    发表于 2023-5-22 11:44 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 11:46 | 显示全部楼层
    焱鑫磊 发表于 2023-5-22 09:09
    黑黑老师厉害了。

    果酱果酱
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 11:47 | 显示全部楼层
    亦是金 发表于 2023-5-22 10:40
    谢谢老师教程!收藏学习备用!

    还有一个可以控制的,马上发出
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 11:47 | 显示全部楼层

    中午好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2023-5-22 12:35 | 显示全部楼层
    第一版实现方式不同,两版可对比学习。老师好细心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 12:54 | 显示全部楼层
    南无月 发表于 2023-5-22 12:35
    第一版实现方式不同,两版可对比学习。老师好细心

    纯JS做的,有很多种实现方式,这里提供的两种,我个人觉得第二种比较好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2023-5-22 17:02 | 显示全部楼层
    这个好,换行更方便,而且时间掌握上完全和字数对应了。给黑黑点赞
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-11-15 14:24
  • 签到天数: 331 天

    [LV.8]以坛为家I

    64

    主题

    2546

    回帖

    8742

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生蝴蝶情怀心香一瓣金剪刀音画大师

    发表于 2023-5-22 17:03 | 显示全部楼层
    感谢老师的分享,欣赏点赞!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2023-5-22 17:05 | 显示全部楼层
    去试了一下,空格也认的呢
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2023-5-22 17:56 | 显示全部楼层
    马黑黑 发表于 2023-5-22 12:54
    纯JS做的,有很多种实现方式,这里提供的两种,我个人觉得第二种比较好

    我尽量努力看懂为啥第二种比较好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 18:05 | 显示全部楼层
    南无月 发表于 2023-5-22 17:56
    我尽量努力看懂为啥第二种比较好

    一个是观感,二个是可控性,三个是使用元素的多寡
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2023-5-22 18:14 | 显示全部楼层
    马黑黑 发表于 2023-5-22 18:05
    一个是观感,二个是可控性,三个是使用元素的多寡

    这么说的话就明白了,可控和代码少是可见的优势。观感没感觉,看上去差不多。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 18:16 | 显示全部楼层
    红影 发表于 2023-5-22 17:02
    这个好,换行更方便,而且时间掌握上完全和字数对应了。给黑黑点赞

    这个可以玩玩,但我总是不是太满意,主要在控制方面,需要的编程开销比较大
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 18:17 | 显示全部楼层
    红影 发表于 2023-5-22 17:05
    去试了一下,空格也认的呢

    它不会忽略空格,我编写代码的时候注意到了这一点,虽然我对此什么也没做
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-16 08:52
  • 签到天数: 1671 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2023-5-22 18:20 | 显示全部楼层
    南无月 发表于 2023-5-22 18:14
    这么说的话就明白了,可控和代码少是可见的优势。观感没感觉,看上去差不多。。

    还是有差别的
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2025-12-16 20:16 , Processed in 0.092703 second(s), 25 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表