javascript - 使用 onClick 事件时函数仅执行一次 [javascript]

标签 javascript html css

我试图在每次单击带有 onclick 事件的按钮 (#angry) 后随机更改 div (#reaction-background) 的背景图像。 但是,背景图像仅在单击按钮后更改一次。

HTML:

<div class="btn-list">
      <a id="angry">ANGRY</a>
      <div id="reaction-background"></div>

Javascript:

// array of pictures
var fileNamesReactions = [
  "angry1.jpg",
  "angry2.jpg",
  "angry3.jpg",
  "angry4.jpg",
  "angry5.jpg"
];
// random reaction index
var randomIndexReaction = Math.floor(Math.random() * fileNamesReactions.length);
// randomize pictures
document.getElementById("angry").onclick = function() {
  document.getElementById("reaction-background").style.background = "url(./img/reactions/angry/" + fileNamesReactions[randomIndexReaction] + ")";
  document.getElementById("reaction-background").style.backgroundRepeat = "no-repeat";
  document.getElementById("reaction-background").style.backgroundSize = "contain";
}

最佳答案

事实上,每次单击时,您的单击事件处理程序都会运行。 问题是,在发生任何点击之前,您仅生成一次随机数,因此您设置背景图像一次,后续点击只会一遍又一遍地设置相同的图像。

您需要将随机生成器移动到点击回调内部,以便每次点击时都会生成一个新的随机数。

此外,请勿使用元素的 onclick 属性来设置回调。虽然这种方法有效,但它已经过时了,您应该使用更强大和标准的 .addEventListener()设置事件的方法。

此外,尽可能在 CSS 中进行样式设置并使用 CSS 类。

把它们放在一起:

// array of pictures
var fileNamesReactions = [
  "angry1.jpg",
  "angry2.jpg",
  "angry3.jpg",
  "angry4.jpg",
  "angry5.jpg"
];

// Get your DOM references that you'll use repeatedly just once:
let backgroundElement = document.getElementById("reaction-background"); 

// randomize pictures
document.getElementById("angry").addEventListener("click", function() {
  // You have to get a new random each time the click occurs.
  var random = Math.floor(Math.random() * fileNamesReactions.length);
  backgroundElement.style.background = "url(./img/reactions/angry/" + fileNamesReactions[random] + ")";
  console.log(backgroundElement.style.background);
});
/* Use CSS classes as much as possible as they make code much simpler */
#reaction-background {
  background-size:"contain";
  background-repeat:"no-repeat";
}
<div class="btn-list">
      <a id="angry">ANGRY</a>
      <div id="reaction-background"></div>
</div>

关于javascript - 使用 onClick 事件时函数仅执行一次 [javascript],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60697442/

相关文章:

javascript - 带有 onclick 的选项卡激活其他 css 样式并显示其特定内容

jQuery - 在 .css 上使用 .animate

javascript - undefined 不是一个 native react 对象

java - Javascript 中的子类 Parse.Object

javascript - Route 中是否有使用 Ember 存储的 Post 请求功能?

javascript - 从表单提交上的单选按钮获取 HTML 自定义 data-* 属性

html - 样式定义列表 - IE clear :both bug

javascript - 如何从 JavaScript 中的对象数组中获取不同的值?

javascript - 如果为空值,则引发输入工具提示

javascript - 代码未在 IE 11 中运行,但在 Chrome 中运行良好