为了确保只有出现省略号的文本在鼠标悬停时滚动而短文本不会滚动,可以通过JavaScript来检测文本是否溢出,并根据检测结果来控制动画的触发。

以下是修正后的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Text Overflow with Scroll</title>
    <style>
        .container {
            width: 200px;
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
            position: relative;
        }
 
        .scrollable {
            overflow: visible;
        }
 
        .scrollable .content {
            animation: scrollText 10s linear infinite;
        }
 
        .content {
            display: inline-block;
            padding-right: 100%;
        }
 
        @keyframes scrollText {
            0% { transform: translateX(0); }
            100% { transform: translateX(-100%); }
        }
    </style>
</head>
<body>
    <div class="container" id="text1">
        <div class="content">
            This is some really long text that will overflow and show an ellipsis.
        </div>
    </div>
 
    <div class="container" id="text2">
        <div class="content">
            Short text.
        </div>
    </div>
 
    <script>
        document.querySelectorAll('.container').forEach(container => {
            const content = container.querySelector('.content');
            if (content.scrollWidth > container.clientWidth) {
                container.classList.add('scrollable');
            }
        });
    </script>
</body>
</html>
 

说明

  1. CSS部分:
  • 保持 .container.content 的基础样式不变。
  • 添加 .scrollable 类用于控制动画触发,只有在文本溢出的情况下才会添加该类。
  • 当容器有 .scrollable 类时, overflow: visible 以及动画会被触发。
  1. JavaScript部分:
  • 使用 document.querySelectorAll('.container') 选择所有的文本容器。
  • 对每个容器,检测其内容的 scrollWidth 是否大于容器的 clientWidth
  • 如果是,则添加 .scrollable 类,使其能够在鼠标悬停时滚动。

这样,只有溢出且显示省略号的文本在鼠标悬停时才会触发滚动效果,短文本不会受到影响。