【问题标题】:How to change the letters in a text on hover如何在悬停时更改文本中的字母
【发布时间】:2020-10-18 19:55:34
【问题描述】:

我正在寻找一种在您将鼠标悬停时更改文本中字母的方法。 在那之后,他们最终不会恢复正常并保持改变。 所以我找到了一个代码来改变文本中每个字母的颜色,但我正在寻找相同的东西来选择字母表中的下一个字母。

非常感谢您的帮助。

$(document).ready(function(){
  var letters = $('p').text();
  var nHTML = '';
  for(var letter of letters) {
    nHTML+="<span class='x'>"+letter+"</span>";
  }
  $('p').html(nHTML);
})
.x:hover {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<p>Hello World!</p>

我还发现此代码可让您更改带有 id 的文本。 我只是不知道如何将它单独应用于我的所有角色。

const $foo = $('#foo');

$foo.hover(function(){
  $foo.text('Blah');
}, function(){
  $foo.text('Foo');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav>
  <li><a href="#0" id="foo">Foo</a></li>
</nav>

另外,我有这个脚本可以找到下一个字母。

function LetterChanges(str) {
    var result = "";
    for (var i = 0; i < str.length; i++) {
        if (122 == str.charCodeAt(i)) {
            result += "a";
        } else if (90 == str.charCodeAt(i)) {
            result += "A";
        } else if ((65 <= str.charCodeAt(i) && str.charCodeAt(i) <= 89) || (97 <= str.charCodeAt(i) && str.charCodeAt(i) <= 121)) {
            result += String.fromCharCode(str.charCodeAt(i) + 1);
        } else {
            result += str.charAt(i);
        }
    }
    return result;
}

console.log(LetterChanges("AaZz+cod!foo"));
$('#result').html(LetterChanges("paul & rémi"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1 id="result"></h1>

【问题讨论】:

    标签: javascript hover letter


    【解决方案1】:

    如果我了解您的需求,那么这就是解决方案:

    function nextLetter(ch) {
        if (!ch.match(/[a-z]/i)) return ch;
        else if (ch === 'Z') return 'A';
        else if (ch === 'z') return 'a';
        return String.fromCharCode(ch.charCodeAt(0) + 1);
    }
    $(document).ready(function(){
      var letters = $('p').text();
      var nHTML = '';
      for(var letter of letters) {
        nHTML+="<span class='x'>"+letter+"</span>";
      }
      $('p').html(nHTML);
      $(".x").hover(function(e) {
        if (e.type === "mouseenter") $(this).text(nextLetter($(this).text()));
      });
    })
    

    解释:

    • 下一封信
      • 检查是否是字母,如果不是字母则什么都不做
      • 如果是 Z 或 z,则从字母表开始,保持大小写
      • 否则查找下一个字母
    • for 循环创建包含单个字母的跨度,具有 x 类
    • 这就是 CSS hover 规则起作用的原因
    • 我们可以创建 Javascript/jQuery 事件
    • 我创建了一个 Javascript 事件,它在悬停时将字母更改为下一个字母

    小提琴:https://jsfiddle.net/1ar8uL4s/

    【讨论】:

    • 这正是我所需要的。非常感谢。我现在更好地理解它了。我还有一个问题:如果我想让标点符号和重音字母也按某种顺序改变怎么办?再次非常感谢。
    • @paulb 欢迎您。您可以根据您的确切需求增强 nextLetter。您可能会在 nextLetter 中有更多案例并稍微更改那里的条件。如果你做这件事有困难,那么你可以问一个单独的问题。我鼓励您尝试解决该问题以进行一些练习,但如果您遇到另一个障碍,您可能想问另一个问题并将其链接留在评论部分。
    • 嘿,再次感谢,我似乎让它工作了,但不知何故它复制了

      的内容并且似乎重新格式化了所有内容......我承认我很卡住。 codepen.io/pbouigue/pen/WNrZjdp 这是笔,您可以看到它是如何复制和删除样式和链接的,再次感谢。

    • @paulb 此处的评论部分不适合解决此问题。我鼓励您提出另一个问题,并在评论部分告诉我。我肯定会在今天或明天研究它。但是,为了向您提供一些可以帮助您找到解决方案的想法,我第一眼看到的主要问题是var letters = $('p').text(); 这会从所有段落中获取所有文本。这就是将您的价值观粘合在一起(重复)的原因。然后$('p').html(nHTML); 将粘贴的文本放入所有段落中。
    • @paulb 你需要像$("p").each(function() {/*$(this) is the current paragraph here*/}); 那样做,基本上将标签视为个体,将它们的内容彼此分开,并实现你需要围绕你的逻辑包装一个循环已实施。希望这会帮助您解决它,但如果仍有障碍,那么我恳请您再问一个问题。
    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-09-10
    • 1970-01-01
    • 2022-10-30
    • 2021-04-18
    相关资源
    最近更新 更多