【问题标题】:Emulate mark tag with css for frequently changing selection使用 css 模拟标记标签以进行频繁更改的选择
【发布时间】:2016-12-14 00:03:34
【问题描述】:

我发现a question 应该回答我的问题,但这不是因为有人决定it's breaking semantic。但我认为有些情况是必要的。

我现在正在编写一个简单的视频播放器,它提供了一些类似字幕的东西(一些东西,因为我以自定义二进制格式接收它们)。我想突出显示这些字幕的一部分(现在正在播放)。在我有几个span 之前,我动态地将active 类设置背景添加为黄色。但与内置的mark 标签相比,它确实看起来很难看。

问题是我应该每秒更新几次字幕,因此频繁修改 DOM 会产生严重的 UI 滞后。 css background 方式消耗资源为零,但看起来很难看(单词之间的空格没有突出显示)。

解决这个问题的最佳方法是什么?

我当前的标记是根据这个二进制字幕信息生成的:

<p>
    <a href="javascript:void(0)" data-s2t-time="3.11" onclick="$('#jquery_jplayer_1').jPlayer('play', 3.11)" class="active">You</a>
    <a href="javascript:void(0)" data-s2t-time="3.36" onclick="$('#jquery_jplayer_1').jPlayer('play', 3.36)" class="active">can</a>
    <a href="javascript:void(0)" data-s2t-time="3.81" onclick="$('#jquery_jplayer_1').jPlayer('play', 3.81)" class="active">always</a>
    <a href="javascript:void(0)" data-s2t-time="4.01" onclick="$('#jquery_jplayer_1').jPlayer('play', 4.01)">add</a>
    <a href="javascript:void(0)" data-s2t-time="4.26" onclick="$('#jquery_jplayer_1').jPlayer('play', 4.26)">some</a>
    <a href="javascript:void(0)" data-s2t-time="5.11" onclick="$('#jquery_jplayer_1').jPlayer('play', 5.11)">non-breaking</a>
    <a href="javascript:void(0)" data-s2t-time="5.22" onclick="$('#jquery_jplayer_1').jPlayer('play', 5.22)">spaces</a>
    <a href="javascript:void(0)" data-s2t-time="5.6" onclick="$('#jquery_jplayer_1').jPlayer('play', 5.6)">before</a>
<p>

它改变了文字的背景:

.active[data-s2t-time] {
    background-color: #FFFF00;
}

但是看起来不太好:

如果我使用mark 看起来不错:

但我得到以下标记:

<p>
    <mark>
        <a href="javascript:void(0)" data-s2t-time="3.11" onclick="$('#jquery_jplayer_1').jPlayer('play', 3.11)">You</a>
        <a href="javascript:void(0)" data-s2t-time="3.36" onclick="$('#jquery_jplayer_1').jPlayer('play', 3.36)">can</a>
        <a href="javascript:void(0)" data-s2t-time="3.81" onclick="$('#jquery_jplayer_1').jPlayer('play', 3.81)">always</a>
    </mark>
    <a href="javascript:void(0)" data-s2t-time="4.01" onclick="$('#jquery_jplayer_1').jPlayer('play', 4.01)">add</a>
    <a href="javascript:void(0)" data-s2t-time="4.26" onclick="$('#jquery_jplayer_1').jPlayer('play', 4.26)">some</a>
    <a href="javascript:void(0)" data-s2t-time="5.11" onclick="$('#jquery_jplayer_1').jPlayer('play', 5.11)">non-breaking</a>
    <a href="javascript:void(0)" data-s2t-time="5.22" onclick="$('#jquery_jplayer_1').jPlayer('play', 5.22)">spaces</a>
    <a href="javascript:void(0)" data-s2t-time="5.6" onclick="$('#jquery_jplayer_1').jPlayer('play', 5.6)">before</a>
<p>

这很难修改(因为我正在更新 DOM 本身,而不是仅仅为某些元素设置一些类)

我现在以以下 css 结束:

.active[data-s2t-time] {
    background-color: #FFFF00;
    margin: -2px;
    padding: 2px;
}

但仍在寻找更好的东西

【问题讨论】:

  • 为什么要在一秒钟内更新几次字幕?我不认为这是有效的
  • 您可以随时添加一些不间断空格::before::after span 元素...我不太确定问题出在哪里。为什么看起来很丑?除了更新和频率方面的性能,您还有什么需求?您能否向我们展示一个示例,说明您已经尝试过什么,以及您对以前/当前的努力做什么/不喜欢什么????
  • @SuperCoolHandsomeGelBoy 因为一个单词的平均发音时间是 0.25 秒。

标签: html css selection


【解决方案1】:

使用以下 CSS 解决:

a.active[data-s2t-time], 
a.active[data-s2t-time]:hover, 
a.active[data-s2t-time]:focus {
    background-color: #019be3;
    margin: -2px;
    padding: 2px;
    color: white;
}

【讨论】:

    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多