V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
humbass
V2EX  ›  JavaScript

字幕滚动有没有更好的方式实现

  •  
  •   humbass · 47 天前 · 1175 次点击
    这是一个创建于 47 天前的主题,其中的信息可能已经有所发展或是发生改变。

    重复造轮子,网上找了一些字幕工具,没有趁手的感觉,比较喜欢官方原来在右侧的展示形式,根据记忆,重新粗糙的复刻了下,https://i.imgur.com/i9dApFu.png

    但是目前的实现方式是 根据 video 播放的进度,找到对应的词条的 dom 高度,向上调整若干 offsetTop ,挺原始的方式

    油管字幕内容是一个类似 xml 格式的文件,从内容上看,应该是把 script 直接丢到页面(或者某个容器)里头,没想明白这种方式是如何实现的。 文件大概长这样

    https://i.imgur.com/ICMeUIY.png

    9 条回复    2024-12-13 20:06:48 +08:00
    DOLLOR
        1
    DOLLOR  
       47 天前
    不用自己算 offsetTop ,scrollIntoView 就可以滚动到元素
    lujiaxing
        2
    lujiaxing  
       47 天前
    额, 哥, 可以不用这么麻烦的. 你可以看下各种字幕文件的做法.
    你做字幕的时候就可以完全按照时间来, hook video 的 ontimeupdate 事件.
    然后至于字幕要显示到什么地方, 这更简单. 右侧不是你的字幕区么, 总高度你算得出来吧, 每一行字幕的高度是固定的吧? 一除就知道能显示多少行字幕吧?

    那不就简单了, 把字幕依次排列进字幕列表里, 前面填充刚好满屏数量的空字幕. ontimeupdate 里得到当前帧对应的字幕, 然后 ``全部字幕 DOM 节点[字幕 Index - (显示多少行字幕 / 2)].scrollIntoView()`` 然后正中间正好就是你要显示的字幕. 你要加粗啊还是变色啊随你.
    humbass
        3
    humbass  
    OP
       47 天前
    @lujiaxing 明显,字幕高度不是固定,大部分是一行,有的时候是 2-4 行,不能简单的 scroll by index.

    滚动的问题也已经实现了,只是不够好,看这个



    youtube 返回的字幕内容是自带 script 标签的,我是猜测原来谷歌实现这个字幕的时候,应该是实现了一个容器,这个丢进去,自动就实现了滚动。
    forty
        4
    forty  
       27 天前
    我怀疑你说的是字幕还是弹幕。。。字幕为什么要滚动?不是直接一句一句的切换吗,滚动起来很难阅读
    humbass
        5
    humbass  
    OP
       26 天前
    @forty

    并不是要盯着字幕看!

    我的方式就是直接听,当听到某些发音、单词、表达有一些疑惑的时候,当意识到的时候往往已经到了下一句,这个时候瞄一眼字幕,看看是啥,视频还是按进度走,这就是右侧字幕存在的意义。

    也是因为这样的需求,很多直接显示在视频画面内的字幕还是延时出现的,延时那么一两句。
    forty
        6
    forty  
       14 天前
    @humbass 那是延时吗,那叫音画不同步(笑哭),一般是故障造成的.
    humbass
        7
    humbass  
    OP
       13 天前 via Android
    @forty 非也,就是故意让字幕慢于视频几秒,字幕是谷歌官方的,不存在不同步的问题
    forty
        8
    forty  
       13 天前
    @humbass 一句话也就 2 秒左右,你还慢几秒,就是典型的不同步了。
    humbass
        9
    humbass  
    OP
       13 天前
    @forty 都说了,有的字幕就是故意慢几秒,看字幕不是非要同步,英语的能力介于掌握和未掌握之间的,经常是听到一句话,没反应过来,反应过来已经是上一句,或者上上句了,所以就要滞后的字幕。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2719 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:24 · PVG 23:24 · LAX 07:24 · JFK 10:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.