jquery - 调试 jQuery 随机变量问题
问题描述
我为最近的一个 Web 项目构建了一个 jQuery 随机显示模块,但它有一个错误。这意味着用一个随机的 div 元素填充 4 个网格图块,并带有一个可以加载 4 个新图块的按钮。有时它只会显示 2 或 3,我不知道为什么。
在https://www.joytotheworldcoaching.com上查看它的实际操作(关于选项卡)
这是代码:
//Randomizer on CLICK
$('#btnRandomizer').click(function() {
var classList = [".randomLittleThings", ".randomJesusBeats", ".randomJoyJams", ".randomFavorites", ".randomQuotes", ".randomPhotos"];
var randomClass1 = classList[Math.floor(Math.random() * classList.length)];
var randomClass2 = classList[Math.floor(Math.random() * classList.length)];
var randomClass3 = classList[Math.floor(Math.random() * classList.length)];
var randomClass4 = classList[Math.floor(Math.random() * classList.length)];
var random1 = $(randomClass1)[Math.floor(Math.random() * $(randomClass1).length)];
var random2 = $(randomClass2)[Math.floor(Math.random() * $(randomClass2).length)];
var random3 = $(randomClass3)[Math.floor(Math.random() * $(randomClass3).length)];
var random4 = $(randomClass4)[Math.floor(Math.random() * $(randomClass3).length)];
var color = ["rgb(245, 171, 153)","rgb(254, 180, 123)","rgb(255, 126, 95)", "rgb(212, 14, 204)", "rgb(113, 58, 166)"];
var randomHeaderColor1 = color[Math.floor(Math.random() * color.length)];
var randomHeaderColor2 = color[Math.floor(Math.random() * color.length)];
var randomHeaderColor3 = color[Math.floor(Math.random() * color.length)];
var randomHeaderColor4 = color[Math.floor(Math.random() * color.length)];
$('.randomLittleThings').fadeOut('hide');
$('.randomJesusBeats').fadeOut('hide');
$('.randomJoyJams').fadeOut('hide');
$('.randomFavorites').fadeOut('hide');
$('.randomQuotes').fadeOut('hide');
$('.randomPhotos').fadeOut('hide');
$(random1).fadeIn('show');
$('.randomLittleThings > .cardHeader').css({'background': randomHeaderColor1});
$(random2).fadeIn('show');
$('.randomJesusBeats > .cardHeader').css({'background': randomHeaderColor2});
$(random3).fadeIn('show');
$('.randomJoyJams > .cardHeader').css({'background': randomHeaderColor3});
$(random4).fadeIn('show');
$('.randomFavorites > .cardHeader').css({'background': randomHeaderColor4});
});
每次单击按钮时应该显示 4 个新图块,但偶尔只显示 2 个或 3 个。我想知道当随机器选择相同的 div 两次时是否会发生这种情况。
解决方案
好的,我已经改变了很多东西,所以我会尝试检查每一个修改。
首先,我创建的是您的版本的原型,可以解决手头的问题。它解决了循环遍历所有四个 div 的问题,并显示了 4 个全新的不同 div。但也包括其他改进,例如动态创建新元素。
第一个 for 循环只是从数组中提到的 div 列表中创建一个 jQuery 对象。然后,一旦所有当前的 div 都被隐藏,下一个 for 循环就会被触发 - 将 jQuery 对象附加到页面中。这是您要重点添加到您的网站的部分。查看小提琴,如您所见,每次都会创建 4 个新项目,并且没有重复。这是因为当使用了 div 时,该 div 会从classList
.
我也做了很多代码整理。例如,我没有针对每个元素并告诉每个元素隐藏,而是针对周围的容器并找到容器内的所有 div。我知道这可能与您在网站中设置的不完全一样,但您可以采用相同的概念。如您所见,这要简洁得多,并且可以节省您将其全部写出来的时间。
我也删除了这些元素,因为如果你隐藏它们,它们将保留在 DOM 中并且会使页面膨胀。因此,现在您将始终在 4 内剩余 4 个.container
。
我已经重复使用了这些颜色,所以我将把它留给你,你想用它们做什么。:) 但是您应该能够获取此代码并根据您所拥有的进行修改。
$('#btnRandomizer').click(function() {
var color = ["rgb(245, 171, 153)", "rgb(254, 180, 123)", "rgb(255, 126, 95)", "rgb(212, 14, 204)", "rgb(113, 58, 166)"];
var randomClass = [],
jQueryObject = [],
randomColor = [],
classList = [
"<div class='randomLittleThings'><div class='cardHeader'>Things</div></div>",
"<div class='randomJesusBeats'><div class='cardHeader'>Jesuss</div></div>",
"<div class='randomJoyJams'><div class='cardHeader'>Jams</div></div>",
"<div class='randomFavorites'><div class='cardHeader'>Favorites</div></div>",
"<div class='randomQuotes'><div class='cardHeader'>Quotes</div></div>",
"<div class='randomPhotos'><div class='cardHeader'>Photos</div></div>"
];
for (i = 0; i <= classList.length; i++) {
randomClass[i] = classList[Math.floor(Math.random() * classList.length)];
classList = classList.filter(e => e !== randomClass[i]);
jQueryObject[i] = $($.parseHTML(randomClass[i]));
}
$('.container div').fadeOut(1000, function() {
$(this).remove();
createNewElems();
});
function createNewElems() {
for (i = 0; i < jQueryObject.length; i++) {
for (j = 0; j < color.length; j++) {
randomColor[j] = color[Math.floor(Math.random() * color.length)];
$(jQueryObject).get(i).appendTo('.container').css({
'background': randomColor[j]
}).hide().fadeIn(250);
}
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="btnRandomizer">
Click me
</button>
<div class="container">
<div class="randomFavorites">
<div class="cardHeader">
Favourites
</div>
</div>
<div class="randomLittleThings">
<div class="cardHeader">
Things
</div>
</div>
<div class="randomJesusBeats">
<div class="cardHeader">
Jesus
</div>
</div>
<div class="randomJoyJams">
<div class="cardHeader">
Jams
</div>
</div>
</div>
推荐阅读
- javascript - props.children 在每个孩子上使用父容器渲染
- c# - Azure 媒体服务定位器
- magento - Magento 2 中的 options_container 模板在哪里定义
- html - HTML:列可以跨越标题行和正文行吗?
- c++ - 调用带有指针对象错误的指针变量
- python-3.x - 加入列表后从列表中格式化字符串
- mysql - 将 sql 转储恢复到正在运行的 mysql/mariadb docker 容器中
- asp.net-web-api - 无法将 IActionResult 转换为 bool
- jenkins - 如何将 ECS 与 Jenkins 集成
- python - 如何在整个 python 数据帧中寻找相似之处?