javascript - 如何为 JavaScript 中 HTML 类的每个实例拥有单独的变量?

标签 javascript jquery

我正在用 JavaScript 制作一个简单的板球记分板。我基本上有一个 div,每次单击它时,它都会在几个不同的背景图像之间循环。你可以明白我的意思here

示例 1 中的 HTML 为:

<div class = "click"></div>

这样工作正常,但我使用了一个全局变量来计算图像周期,所以当我尝试添加多个框时,会发生这种情况:

var x = 0;

$('.click').click(function() {
  x++;
  if (x == 4) {
    x = 0;
  }

  switch (x) {
    case 0:
      $(this).css('background-image', 'url("none")')
      break;
    case 1:
      $(this).css('background-image', 'url("https://i.imgur.com/25qbHoC.png")');
      break;
    case 2:
      $(this).css('background-image', 'url("https://i.imgur.com/9pcneSb.png")');
      break;
    case 3:
      $(this).css('background-image', 'url("https://i.imgur.com/Vfxu8ap.png")');
  }
});
.click {
  height: 150px;
  width: 150px;
  background-color: steelblue;
  background-size: 150px 150px;
  display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="click"></div>
<div class="click"></div>
<div class="click"></div>
<div class="click"></div>

我怎样才能防止这种情况发生,并且只拥有您在第一个示例中看到的多个内容?谢谢。

最佳答案

问题是因为您使用的是全局计数器,而不是每个图像实例一个计数器。要解决此问题,您可以使用 data 属性来存储特定于该图像的计数器。

另请注意,您可以通过将图像设置存储在数组中并访问该数组而不是 switch 语句来使逻辑更加简洁。您还可以使用模运算符来取消将计数器重置回 0 的需要。试试这个:

var images = [
  'url("none")',
  'url("https://i.imgur.com/25qbHoC.png")',
  'url("https://i.imgur.com/9pcneSb.png")',
  'url("https://i.imgur.com/Vfxu8ap.png")'
]

$('.click').click(function() {
  var $el = $(this);
  var x = $el.data('counter') || 1;
  $el.css('background-image', images[x % 4]).data('counter', ++x);
});
.click {
  height: 150px;
  width: 150px;
  background-color: steelblue;
  background-size: 150px 150px;
  display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div class="click"></div>
<div class="click"></div>
<div class="click"></div>
<div class="click"></div>

关于javascript - 如何为 JavaScript 中 HTML 类的每个实例拥有单独的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48954326/

相关文章:

javascript - JSON 解析错误 : unexpected end of data at line 1 column 1 of the JSON data

javascript - 选项卡中的嵌套 Accordion

jquery - 宽度 jquery 选项卡

jquery - 用jquery获取点击元素的位置?

javascript - 为什么 Jquery 无法识别 id 为 "houseNumber[x]"的元素

javascript - 如何在angularjs工厂中调用函数

javascript - react native : Can't style the Button

javascript - 如何将输入数字之前(包括输入数字)的所有数字相加?

javascript - jquery 只允许点与数字

jquery - 为什么通过 npm 安装语义 UI 会错过 jQuery 并向其抛出引用错误?