使用 vanilla javascript 函数切换图像源

Toggle image source with vanilla javascript function

我正在尝试使用 Javascript 在单击时交换 SVG 徽标图像。我的脚本如下所示:

document.querySelector('.logo').addEventListener('click', function() {
    document.querySelector('#logo-switch').src='logo-B.svg';
    document.querySelector('#logo-switch').src='logo-A.svg';
    })

该函数在第一次点击时起作用(当第三行代码被删除时): document.querySelector('#logo-switch').src='logo-A.svg';

但是,我希望每次单击徽标时它都能切换回原始 src — 这应该起到切换的作用。

这是用 if 语句完成的吗?或者这是如何实现的?

非常感谢

您需要检查哪个徽标是最新的,然后将其替换为另一个。它也可以通过三元运算符来完成,但在这种情况下 if-else 更 human-readable/understandable。

正如您在 OP 中描述的那样,该功能在第一次点击时运行良好,因此假设点击处理程序工作正常,下面是要添加的条件

document.querySelector('.logo').addEventListener('click', function() {
    if (document.querySelector('#logo-switch').src.indexOf('logo-A') != -1) {
      document.querySelector('#logo-switch').src = 'logo-B.svg';
    } else {
      document.querySelector('#logo-switch').src = 'logo-A.svg';
    }
})

使用 closure 怎么样?

document.querySelector('.logo').addEventListener(
  'click',
  switchImage(
    document.querySelector('#logo-switch'),
    'logo-B.svg',
    'logo-A.svg'
  )
);

function switchImage (element, src1, src2) {
  var first = true;
  return function () {
    if (first) {
      element.src = src1;
      first = false;
    } else {
      element.src = src2;
      first = true;
    }
  }
}

编辑:使用来自@kooiinc

的片段

document.querySelector('.logo').addEventListener(
  'click',
  switchImage(
    document.querySelector('#logo-switch'),
    '//upload.wikimedia.org/wikipedia/commons/1/1f/Skip_to_right3.svg',
    '//upload.wikimedia.org/wikipedia/commons/a/af/Skip_to_left3.svg'
  )
);

function switchImage (element, src1, src2) {
  var first = true;
  return function () {
    if (first) {
      element.setAttribute('href', src1);
      first = false;
    } else {
      element.setAttribute('href', src2);
      first = true;
    }
  }
}
.logo,
#logo-switch {
  width: 150px;
  height: 150px;
  display: inline-block;
  cursor: pointer;
}
<svg class="logo">
  <image id="logo-switch" href="//upload.wikimedia.org/wikipedia/commons/a/af/Skip_to_left3.svg">
</svg>

此代码有效:-

let replaced = false;

document.querySelector('.logo').addEventListener('click', function() {
    document.querySelector('#logo-switch').src = replaced ? 'logo-A.svg' : 'logo-B.svg';
    replaced = !replaced;
});

如果有意义的话,这使用一个变量来跟踪内容是否被交替替换。然后在此基础上,它更改图像的源文件。

.logo 元素使用额外的 css-class 并为此使用 toggle that on click. The snippet is using event delegation

document.addEventListener(`click`, handle);

function handle(evt) {
  if (evt.target.classList.contains(`logo`)) {
    return evt.target.classList.toggle(`right`);
  }
}
.logo {
  width: 150px;
  height: 150px;
  display: inline-block;
  background: url(//upload.wikimedia.org/wikipedia/commons/a/af/Skip_to_left3.svg) no-repeat;
  background-size: contain;
  cursor: pointer;
}

.right {
  background-image: url(//upload.wikimedia.org/wikipedia/commons/1/1f/Skip_to_right3.svg);
}
<div class="logo"></div>