javascript - 如何更改 JavaScript 中按钮的颜色以应用于另一个函数?
问题描述
我正在尝试在 javascript 中创建一个按钮效果,以将其调用到另一个函数中。单击按钮时,它将显示另一种颜色,然后将返回其原始状态(颜色)。它确实可以:active
在 css 中完成,但我无法将效果用于另一个函数。
该代码的最终用途是用于西蒙游戏项目,其中将随机创建玩家将跟随的序列。
我已经播放了声音并更改了每个按钮的颜色,但在单击后无法将按钮恢复到其原始状态(颜色)。
let blueBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
let redBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound2.mp3');
let yellowBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound3.mp3');
let greenBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound4.mp3');
// VARIABLES - DOM QUERIES
const btnBlue = document.querySelectorAll("#btnBlue");
const btnGreen = document.querySelectorAll("#btnGreen");
const btnRed = document.querySelectorAll("#btnRed");
const btnYellow = document.querySelectorAll("#btnYellow");
$(btnBlue).click(function() {
$(this).css('background-color', '#00FFFF');
blueBtnAudio.play();
if($(btnBlue).css('background-color') == '#00FFFF'){
$(btnBlue).css('background-color', 'blue')
}
});
解决方案
我想您希望按钮更改其颜色,然后在播放完声音后恢复其原始颜色?
您可以通过两种方式做到这一点,首先将按钮的原始颜色存储在变量中,然后更改其颜色并播放声音,最后设置 1 秒的超时时间,然后将按钮的颜色更改为其原始颜色,如下所示:
let blueBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
let redBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound2.mp3');
let yellowBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound3.mp3');
let greenBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound4.mp3');
// VARIABLES - DOM QUERIES
const btnBlue = $("#btnBlue");
const btnGreen = $("#btnGreen");
const btnRed = $("#btnRed");
const btnYellow = $("#btnYellow");
$(btnBlue).click(function() {
var originalColor = $(this).css('background-color');
$(this).css('background-color', '#00FFFF')
var newColor = $(this).css('background-color');
if (originalColor != newColor) {
blueBtnAudio.play();
setTimeout(function() {
$(btnBlue).css('background-color', originalColor);
}, 1000);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="btnBlue">
btnBlue
</button>
或者您可以在音频结束播放时添加一个事件侦听器,然后将按钮应用其原始颜色(此解决方案更好,因为它取决于音频的长度,而不是我们在第一个解决方案中设置的手动超时):
let blueBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
let redBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound2.mp3');
let yellowBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound3.mp3');
let greenBtnAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound4.mp3');
// VARIABLES - DOM QUERIES
const btnBlue = $("#btnBlue");
const btnGreen = $("#btnGreen");
const btnRed = $("#btnRed");
const btnYellow = $("#btnYellow");
$(btnBlue).click(function() {
var originalColor = $(this).css('background-color');
$(this).css('background-color', '#00FFFF')
var newColor = $(this).css('background-color');
if (originalColor != newColor) {
blueBtnAudio.play();
blueBtnAudio.addEventListener('ended', function() {
$(btnBlue).css('background-color', originalColor);
});
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="btnBlue">
btnBlue
</button>
推荐阅读
- java - 为什么 java 对象比较在 '==' 和 .equals() 方法上都失败了?
- javascript - 浏览器和nodejs上有没有可以将base64字符串转换为utf8字符串的API?
- kubernetes - 如何在 helmchart 中设置自定义发布名称
- php - Facebook登录并通过命令行获取帖子
- java - 如果在并发操作中不存在,则 JPA 插入实体
- node.js - MariaDB 连接到 ExpressJS 访问被拒绝,没有密码错误
- html - 图像 inisde flex 项目缩小
- python - 模块“pytextrank”没有属性“parse_doc”
- javascript - 如何使用 javascript、html 和/或 css 获取两个元素并将它们集中在一起?
- javascript - FTPS 服务器给出错误:超时(控制套接字)