Latley我正在研究一个学校项目,我必须提出一个算法,在我的例子中是一个解决算法的河内拼图塔.由于我对HTML/CSS的了解,我认为使用这些+ Javascript来可视化网页上的步骤是非常巧妙的.
我得到了网站设置以及基本的递归算法.
function move(n, beg, aux, end) {
if (n == 1) {
console.log(beg + '-->' + end + '\n');
setTowers(beg, end);
} else {
move(n - 1, beg, end, aux);
move(1, beg, aux, end);
move(n - 1, aux, beg, end);
}
}
Run Code Online (Sandbox Code Playgroud)
页面布局(CSS代码在这里没有帮助):
section#main-app
.app-wrapper
.tower-wrapper
.tower#twr--a
.block.blck--top
.block.blck--middle
.block.blck--bottom
.tower#twr--b
.block.blck--top
.block.blck--middle
.block.blck--bottom
.tower#twr--c
.block.blck--top
.block.blck--middle
.block.blck--bottom
Run Code Online (Sandbox Code Playgroud)
然后我开始挣扎,因为我必须以某种方式想象它.我想把每个塔放进一个阵列:
var twrElemsA = document.getElementById('twr--a').getElementsByClassName('block');
towerA = jQuery.makeArray(twrElemsA);
Run Code Online (Sandbox Code Playgroud)
然后实际设置颜色的功能.目前有两件事:如果需要它不会擦除颜色,它根本不会设置颜色,因为我搞砸了switch语句/不知道如何正确地做到这一点.
function setColors(target) {
target.forEach(function (element) {
switch (element) {
case '<div class="block blck--top">':
$(element).css({
'background-color': 'red'
});
break;
case '<div class="block blck--middle">':
$(element).css({
'background-color': '#51616F'
});
break;
case '<div class="block blck--bottom">':
$(element).css({
'background-color': '#394B5A'
});
break;
}
});
Run Code Online (Sandbox Code Playgroud)
}
现在,如果移动函数返回例如A - > B,则setColors应该在TowerB上迭代并将所有三个块的背景颜色设置为特定颜色.但是switch语句不起作用,我用完了想法和时间,这是一个令人讨厌的组合.
也许有人知道什么可以帮助这里.我感谢任何帮助!
问候..
小智 1
从 setColors 函数的外观来看,您正在使用 JavaScript 对块进行视觉修改。前端 Web 开发的普遍共识是将这些任务留给 CSS。
在您的情况下,您正在检查您的 DIV 是否有类block和blck--bottom。因此,您可以尝试使用以下选择器的样式表,而不是使用 JavaScript:
.block.blck--top {
background-color: '#51616F';
}
.block.blck--middle {
background-color: '#51616F';
}
.block.blck--bottom {
background-color: '#51616F';
}
Run Code Online (Sandbox Code Playgroud)
然而与此相反,如果您需要执行不基于视觉的进一步操作,您可以采取以下方法。
function setColors(target) {
target.forEach(function (element) {
if(element.classList.contains('blck--top'))
{
element.style['background-color'] = 'red';
/* - Extra code here - */
}
else if(element.classList.contains('blck--middle'))
{
element.style['background-color'] = '#51616F';
/* - Extra code here - */
}
else if(element.classList.contains('blck--bottom'))
{
element.style['background-color'] = '#394B5A';
/* - Extra code here - */
}
});
Run Code Online (Sandbox Code Playgroud)
但如果你真的想使用 switch case 语句,那么:
function setColors(target) {
target.forEach(function (element) {
switch (element.getAttribute('class')) {
case 'block blck--top':
$(element).css({
'background-color': 'red'
});
break;
case 'block blck--middle':
$(element).css({
'background-color': '#51616F'
});
break;
case 'block blck--bottom':
$(element).css({
'background-color': '#394B5A'
});
break;
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,我还提供了一种方法,让您可以使用普通的旧式 JavaScript(如果您愿意,可以不用 JQuery)执行相同的任务。