gpt4 book ai didi

javascript - 按钮未正确更新输出

转载 作者:行者123 更新时间:2023-11-30 11:53:23 25 4
gpt4 key购买 nike

我正在编写一个随机报价机,但在单击“新报价”按钮时遇到了问题。为了简洁起见,quotescolorsanimations 变量的数据已被简化和缩小。所以问题是这样的。当我不断单击按钮并使用较小的数据集时,我注意到响应时间变长了,并且颜色、引号和/或动画没有改变。这是显而易见的,因为动画并不总是运行。有了这组较小的数据,我知道新输出可能与以前的输出完全相同,但动画应该仍然运行,有时却不运行。如果没有 loadQuotes() 函数并且没有 window.onload = loadQuotes(); 并且我按键盘上的 F5 重新加载页面,则此代码可以正确运行。当我将代码放入 loadQuotes() 函数并使用页面底部的 window.onload = loadQuotes(); 获取初始输出时,问题就开始了。我尝试将所有变量和 randomNum() 函数移到 loadQuotes() 函数之外(因为我假设它们是全局的),当我这样做时初始页面加载后,单击按钮根本不会执行任何操作。所以我关心的是如何通过按 F5 但单击按钮来加载页面,如上所述。

function loadQuotes() {
function randomNum(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

var quotes = [
["This is quote number one.", "Person 1"],
["This is quote number two.", "Person 2"],
["This is quote number three.", "Person 3"],
["This is quote number four.", "Person 4"],
["This is quote number five.", "Person 5"]
]

var colors = [
["#096986", "#F69679"],
["#000866", "#FFF799"],
["#7D3563", "#82CA9C"]
]

var animations = ["animated bounce", "animated flash", "animated pulse"]

var getQuotes = randomNum(0, quotes.length - 1);
var getColors = randomNum(0, colors.length - 1);

var newColor0 = colors[getColors][0];
var newColor1 = colors[getColors][1];
var newAnimation1 = animations[randomNum(0, animations.length - 1)]
var newAnimation2 = animations[randomNum(0, animations.length - 1)]

document.getElementById("quote").innerHTML = "<h1>" + quotes[getQuotes][0] + "</h1>";
document.getElementById("author").innerHTML = "<h3>" + "--- " + quotes[getQuotes][1] + "</h3>";

$(document).ready(function() {
$(".side-panel").css("background-color", newColor0);
$(".middle").css("background-color", newColor1);
$("#quote").addClass(newAnimation1);
$("#author").addClass(newAnimation2);
$(".btn").on("click", function() {
loadQuotes();
});
});
}

window.onload = loadQuotes();
h1 {
text-align: center;
font-size: 3.5em;
}
h3 {
font-size: 1.5em;
}
/* div { border: 1px solid black; } */

.full-height {
height: 100vh;
}
.side-panel {
background-color: newColor0;
}
.middle {
background-color: newColor1;
}
.quote-box {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 80%;
height: 65%;
border-radius: 7.5%;
background-color: #FFFFFF;
}
.quote-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 90%;
height: 50%;
}
<!DOCTYPE html>

<html lang="en-us">

<head>
<title>Random Quote Machine</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css" />
<link rel="stylesheet" href="style.css" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>

<body>
<div class="container-fluid">
<div class="row">
<div class="col-xs-1 side-panel full-height"></div>
<div class="col-xs-10 middle full-height">
<div class="quote-box">
<div class="quote-text">
<p id="quote"></p>
<p id="author"></p>
<button type="button" class="btn btn-lg pull-right">New Quote</button>
</div>
</div>
</div>
<div class="col-xs-1 side-panel full-height"></div>
</div>
</div>
</body>

</html>

最佳答案

您的问题是嵌套函数的方式。

我已经改变了你的逻辑并整理了一切。

这是您的代码,只是放在正确的位置。

https://jsfiddle.net/hj5w5rdq/

var quotes =[
["This is quote number one.", "Person 1"],
["This is quote number two.", "Person 2"],
["This is quote number three.", "Person 3"],
["This is quote number four.", "Person 4"],
["This is quote number five.", "Person 5"]
];

var colors = [
["#096986", "#F69679"],
["#000866", "#FFF799"],
["#7D3563", "#82CA9C"]
];

var animations = [
"animated bounce",
"animated flash",
"animated pulse"
];

var getQuotes,
getColors,
newColor0,
newColor1,
newAnimation1,
newAnimation2;

function loadQuotes(){

getQuotes = randomNum(0, quotes.length - 1);
getColors = randomNum(0, colors.length - 1);
newColor0 = colors[getColors][0] ;
newColor1 = colors[getColors][1];
newAnimation1 = animations[randomNum(0, animations.length - 1)]
newAnimation2 = animations[randomNum(0, animations.length - 1)]

document.getElementById("quote").innerHTML = "<h1>" + quotes[getQuotes][0] + "</h1>";
document.getElementById("author").innerHTML = "<h3>" + "--- " + quotes[getQuotes][1] + "</h3>";

$(".side-panel").css("background-color", newColor0);
$(".middle").css("background-color", newColor1);
$("#quote").addClass(newAnimation1);
$("#author").addClass(newAnimation2);
}

function randomNum(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

$(document).ready(function() {
$(".btn").on("click", function() {
loadQuotes();
});

loadQuotes();
});

关于javascript - 按钮未正确更新输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38801770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com