javascript - 生成多个随机字母来创建解密效果?
问题描述
我想创建一个像这样的效果链接!(背景中的行星名称)
所以我需要生成许多随机字母才能一个一个显示我的单词的字母。
在我的测试中,我尝试在我的 div.planet-name 中以 1000 毫秒的延迟逐个字母显示这个词。在显示月亮字母之前,我想生成许多随机字母。
但是当我使用函数 randomLetterEffect 时,我在第一个字母上一直被阻塞,并且没有出现月亮这个词!
为什么我不在 text.substring(0, 1)、text.substring(0, 2)、text.substring(0, 3) 等中生成随机字母......但只在 text.substring(0, 0 ) ?
我试试这个:
var text = $('.planet-menu').data('planet');
var letterChoice = "abcdefghijklmnopqrstuvwxyz"
var length = text.length;
var timeOut;
var timeOut2;
var character = 0;
(function typeWriter() {
timeOut = setTimeout(function() {
character++;
var type = text.substring(0, character);
(function ramdomLetterEffect(){
timeOut2 = setTimeout(function() {
var type = text.substring(0, character);
var randomLetter = letterChoice.charAt(Math.floor(Math.random() * letterChoice.length));
$('.planet-name').text(randomLetter);
ramdomLetterEffect();
if (character == length) {
clearTimeout(timeOut2);
}
},200);
}());
$('.planet-name').text(type);
typeWriter();
if (character == length) {
clearTimeout(timeOut);
}
}, 1000);
}());
<div class="planet-menu" data-planet="moon"></div>
<div class="planet-name"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
我非常感谢您的阅读!
解决方案
如果我正确理解您的问题,这些问题在您的代码中:
1-在更新类的文本之前检查字符串的长度
if (character==length) {
clearTimeout(timeOut2);
return;
}
2-像这样更新类的文本
$(".planet-name").text($(".planet-name").text().substr(0, character) + randomLetter);
工作代码
var text = $(".planet-menu").data("planet");
var letterChoice = "abcdefghijklmnopqrstuvwxyz";
var length = text.length;
var timeOut;
var timeOut2;
var character = 0;
(function typeWriter() {
timeOut = setTimeout(function() {
character++;
var type = text.substring(0, character);
(function ramdomLetterEffect() {
timeOut2 = setTimeout(function() {
var type = text.substring(0, character);
var randomLetter = letterChoice.charAt(
Math.floor(Math.random() * letterChoice.length)
);
if (character == length) {
clearTimeout(timeOut2);
return;
}
$(".planet-name").text($(".planet-name").text().substr(0, character) + randomLetter);
if (character == length) {
clearTimeout(timeOut2);
} else {
ramdomLetterEffect();
}
}, 200);
})();
$(".planet-name").text(type);
typeWriter();
if (character == length) {
clearTimeout(timeOut);
}
}, 1000);
})();
<div class="planet-menu" data-planet="moon">
</div>
<div class="planet-name"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
推荐阅读
- verilog - 在case语句系统verilog中生成块
- sql - 存储函数值
- javascript - 如何解析从webapi返回的json日期时间以使用ajax以yyyy/mm/dd格式在前端打印
- datetime - Dynamics CRM 365 本地统一界面 webresource 从表单中读取日期字段以 UTC 获取日期
- python - 第三个括号内的双冒号 [::] 是什么意思?
- sql - 在 vertica 中编写 udf 的最佳方法,我需要从其中一个费率表中引用数据并在顶部写一个公式
- linux - 如何在 shell 脚本中使用命令输出作为 grep 的输入
- java - Java - yahtzee 的小动画 - 改变图像
- php - 使用 php 获取 Flipkart 卖家账户的访问令牌
- python - 为什么寻求属性不能在 chrome 浏览器上工作..??但是它可以在 IE 上运行