除了使用 HTML 的 <ruby> 标签和 JavaScript 来注释生词外,还有其他一些优秀的工具和方法可以用于注解生词并进行学习。以下是几种推荐的方法:

1. 使用 Tippy.js 实现注解

Tippy.js 是一个强大的 Tooltip 库,可以用来实现鼠标悬停时显示注释。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tippy.js Example</title>
    <link rel="stylesheet" href="https://unpkg.com/tippy.js@6/dist/tippy.css">
    <style>
        .tooltip {
            cursor: pointer;
            color: blue;
            border-bottom: 1px dashed blue;
        }
    </style>
</head>
<body>
    <h1>Tippy.js Example</h1>
    <p id="text">Joe Biden imposed another round of <span class="tooltip" data-tippy-content="关税">tariffs</span> on Chinese exports to America, most notably increasing the duties on to 100%. America imports relatively few Chinese <span class="tooltip" data-tippy-content="电动车 (Electric Vehicles)">EVs</span> but Mr Biden suggested his steps were <span class="tooltip" data-tippy-content="先发制人的">pre-emptive</span>. Chinese carmakers are <span class="tooltip" data-tippy-content="扩展">expanding</span> in Europe.</p>
 
    <script src="https://unpkg.com/@popperjs/core@2"></script>
    <script src="https://unpkg.com/tippy.js@6"></script>
    <script>
        tippy('.tooltip');
    </script>
</body>
</html>

2. 使用 annotator.js 实现注解

annotator.js 是一个用于网页注释的 JavaScript 库,可以用来标注文本并添加注释。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Annotator.js Example</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/annotator@2.0.0-alpha.7/annotator.min.css">
</head>
<body>
    <h1>Annotator.js Example</h1>
    <p id="text">Joe Biden imposed another round of tariffs on Chinese exports to America, most notably increasing the duties on to 100%. America imports relatively few Chinese EVs but Mr Biden suggested his steps were pre-emptive. Chinese carmakers are expanding in Europe.</p>
 
    <script src="https://cdn.jsdelivr.net/npm/annotator@2.0.0-alpha.7/annotator.min.js"></script>
    <script>
        var annotator = new Annotator(document.getElementById('text'));
        annotator.addPlugin('Tags');
    </script>
</body>
</html>

3. 使用 bootstrap-tooltip 实现注解

Bootstrap 的 Tooltip 功能可以用来实现注释,适合已经使用 Bootstrap 框架的项目。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bootstrap Tooltip Example</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <h1>Bootstrap Tooltip Example</h1>
    <p>Joe Biden imposed another round of <span data-bs-toggle="tooltip" data-bs-placement="top" title="关税">tariffs</span> on Chinese exports to America, most notably increasing the duties on to 100%. America imports relatively few Chinese <span data-bs-toggle="tooltip" data-bs-placement="top" title="电动车 (Electric Vehicles)">EVs</span> but Mr Biden suggested his steps were <span data-bs-toggle="tooltip" data-bs-placement="top" title="先发制人的">pre-emptive</span>. Chinese carmakers are <span data-bs-toggle="tooltip" data-bs-placement="top" title="扩展">expanding</span> in Europe.</p>
 
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
    <script>
        var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
        var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
            return new bootstrap.Tooltip(tooltipTriggerEl);
        });
    </script>
</body>
</html>

4. 使用 highlight.js 和 tooltip.js 实现注解

结合 highlight.js 和 tooltip.js 可以实现复杂的注释功能。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Highlight.js and Tooltip.js Example</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@11.3.1/styles/default.min.css">
    <style>
        .tooltip {
            position: relative;
            cursor: pointer;
            color: blue;
            border-bottom: 1px dashed blue;
        }
        .tooltip .tooltiptext {
            visibility: hidden;
            width: 120px;
            background-color: black;
            color: #fff;
            text-align: center;
            border-radius: 6px;
            padding: 5px 0;
            position: absolute;
            z-index: 1;
            bottom: 150%;
            left: 50%;
            margin-left: -60px;
            opacity: 0;
            transition: opacity 0.3s;
        }
        .tooltip:hover .tooltiptext {
            visibility: visible;
            opacity: 1;
        }
    </style>
</head>
<body>
    <h1>Highlight.js and Tooltip.js Example</h1>
    <p>Joe Biden imposed another round of <span class="tooltip">tariffs<span class="tooltiptext">关税</span></span> on Chinese exports to America, most notably increasing the duties on to 100%. America imports relatively few Chinese <span class="tooltip">EVs<span class="tooltiptext">电动车 (Electric Vehicles)</span></span> but Mr Biden suggested his steps were <span class="tooltip">pre-emptive<span class="tooltiptext">先发制人的</span></span>. Chinese carmakers are <span class="tooltip">expanding<span class="tooltiptext">扩展</span></span> in Europe.</p>
 
    <script src="https://cdn.jsdelivr.net/npm/highlight.js@11.3.1/lib/highlight.js"></script>
    <script>hljs.highlightAll();</script>
</body>
</html>

总结

上述方法都可以用于实现生词注解,帮助用户更好地学习和理解英文文章。根据你的需求和使用的技术栈,可以选择最适合的工具和方法来实现这个功能。

当然,除了之前提到的方法,还有一些其他的技术和工具可以实现类似于 Kindle Word Wise 的效果。以下是一些更多的选项:

1. 使用 Popper.js 实现注释

Popper.js 是一个强大的库,用于管理 tooltip 和 popover 的位置,可以用来实现鼠标悬停时显示注释。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Popper.js Example</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tippy.js/6.3.1/tippy.css">
    <style>
        .tooltip {
            cursor: pointer;
            color: blue;
            border-bottom: 1px dashed blue;
        }
    </style>
</head>
<body>
    <h1>Popper.js Example</h1>
    <p>Joe Biden imposed another round of <span class="tooltip" data-tippy-content="关税">tariffs</span> on Chinese exports to America, most notably increasing the duties on to 100%. America imports relatively few Chinese <span class="tooltip" data-tippy-content="电动车 (Electric Vehicles)">EVs</span> but Mr Biden suggested his steps were <span class="tooltip" data-tippy-content="先发制人的">pre-emptive</span>. Chinese carmakers are <span class="tooltip" data-tippy-content="扩展">expanding</span> in Europe.</p>
 
    <script src="https://unpkg.com/@popperjs/core@2"></script>
    <script src="https://unpkg.com/tippy.js@6"></script>
    <script>
        tippy('.tooltip');
    </script>
</body>
</html>

2. 使用 highlight.js 和 Tooltipster 实现注释

highlight.js 和 Tooltipster 可以结合使用来创建复杂的注释效果。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Highlight.js and Tooltipster Example</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tooltipster/4.2.8/css/tooltipster.bundle.min.css">
    <style>
        .tooltip {
            cursor: pointer;
            color: blue;
            border-bottom: 1px dashed blue;
        }
    </style>
</head>
<body>
    <h1>Highlight.js and Tooltipster Example</h1>
    <p>Joe Biden imposed another round of <span class="tooltip" title="关税">tariffs</span> on Chinese exports to America, most notably increasing the duties on to 100%. America imports relatively few Chinese <span class="tooltip" title="电动车 (Electric Vehicles)">EVs</span> but Mr Biden suggested his steps were <span class="tooltip" title="先发制人的">pre-emptive</span>. Chinese carmakers are <span class="tooltip" title="扩展">expanding</span> in Europe.</p>
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tooltipster/4.2.8/js/tooltipster.bundle.min.js"></script>
    <script>
        $(document).ready(function() {
            $('.tooltip').tooltipster();
        });
    </script>
</body>
</html>

3. 使用 Bootstrap Popovers 实现注释

Bootstrap 的 Popover 功能可以用来实现注释,适合已经使用 Bootstrap 框架的项目。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bootstrap Popover Example</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        .popover {
            max-width: 200px;
        }
    </style>
</head>
<body>
    <h1>Bootstrap Popover Example</h1>
    <p>Joe Biden imposed another round of <span data-bs-toggle="popover" data-bs-trigger="hover" title="Tariffs" data-bs-content="关税">tariffs</span> on Chinese exports to America, most notably increasing the duties on to 100%. America imports relatively few Chinese <span data-bs-toggle="popover" data-bs-trigger="hover" title="EVs" data-bs-content="电动车 (Electric Vehicles)">EVs</span> but Mr Biden suggested his steps were <span data-bs-toggle="popover" data-bs-trigger="hover" title="Pre-emptive" data-bs-content="先发制人的">pre-emptive</span>. Chinese carmakers are <span data-bs-toggle="popover" data-bs-trigger="hover" title="Expanding" data-bs-content="扩展">expanding</span> in Europe.</p>
 
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
    <script>
        var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
        var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
            return new bootstrap.Popover(popoverTriggerEl)
        })
    </script>
</body>
</html>

4. 使用 balloon.css 实现注释

balloon.css 是一个纯 CSS 的 Tooltip 库,适合需要快速实现轻量级注释的场景。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Balloon.css Example</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/balloon-css/balloon.min.css">
    <style>
        .tooltip {
            cursor: pointer;
            color: blue;
            border-bottom: 1px dashed blue;
        }
    </style>
</head>
<body>
    <h1>Balloon.css Example</h1>
    <p>Joe Biden imposed another round of <span class="tooltip" aria-label="关税" data-balloon-pos="up">tariffs</span> on Chinese exports to America, most notably increasing the duties on to 100%. America imports relatively few Chinese <span class="tooltip" aria-label="电动车 (Electric Vehicles)" data-balloon-pos="up">EVs</span> but Mr Biden suggested his steps were <span class="tooltip" aria-label="先发制人的" data-balloon-pos="up">pre-emptive</span>. Chinese carmakers are <span class="tooltip" aria-label="扩展" data-balloon-pos="up">expanding</span> in Europe.</p>
</body>
</html>

总结

上述方法都可以用于实现生词注解,帮助用户更好地学习和理解英文文章。根据你的需求和使用的技术栈,可以选择最适合的工具和方法来实现这个功能。无论是使用 Popper.js、Tooltipster、Bootstrap Popover 还是 Balloon.css,都能为你提供丰富的注释效果。