使用JavaScript来插入onclick函数和img src设置来通过ID更改图像?

vngu2lb8  于 2023-03-16  发布在  Java
关注(0)|答案(2)|浏览(147)

在WordPress和Woocommerce中,我尝试在子主题functions.php中应用javascript,所以如果用户点击特定的产品属性颜色样本,它会将预览图像(显示在样本选择器下面)用特定的ID更改为新的图像源URL。
我可以得到一个单一的样本(黑色)来改变目标图像,但我不知道如何重复其他样本的命令。

add_action( 'woocommerce_before_single_product', 'bluetera_swatch_onclick' );

function bluetera_swatch_onclick() { ?>

    <script type='text/javascript'>
        var input = document.getElementById("ecorigidswatches_Black");
        input.onclick = function swapproductimg() {
        document.getElementById('selected-swatch').src="https://www.laserfelt.com/wp-content/uploads/2021/06/BlackHexagon.jpg";

}

    </script>
    <?php
}

以下是相关产品页面的链接:
https://www.laserfelt.com/product/hexagon-acoustic-wall-tiles/
我还尝试创建一个条件语句,使其仅在用户查看特定类别的产品时才执行此函数。但我也不知道如何执行。所有尝试都失败了。我们有不同的颜色样本集,我正在尝试找到一种方法,使脚本仅在需要时加载。
我也想知道这是否是最有效的方法来达到预期的结果,或者是否有更好的方法来提高页面加载速度?我被限制在使用现有的插件来创建这些产品样本选项。这就是为什么我不得不以一种迂回的方式插入onclick函数。
我们不想使用任何预先存在的样本插件,只改变了主要的产品形象。
我真的很感激一些指点,提示和方向。谢谢!
--更新--
根据Michal的建议,我也尝试了这个方法,但没有效果:

var black = document.getElementById("ecorigidswatches_Black");
var berry = document.getElementById("ecorigidswatches_Berry");
if (berry.checked = true) {
  document.getElementById('selected-swatch').src="https://www.laserfelt.com/wp-content/uploads/2021/06/BerryHexagon.jpg";
} elseif (black.checked = true) {
  document.getElementById('selected-swatch').src="https://www.laserfelt.com/wp-content/uploads/2021/06/BlackHexagon.jpg";
}

---更新-部分解决方案---
在弗拉基米尔的帮助下,我能够让这个工作,但如果我点击任何其他产品属性或输入,它会将目标img src更改为“undefined”和图像变得破碎.以下是我的工作代码,是在functions.php文件:

add_action( 'woocommerce_before_single_product', 'bluetera_swatch_onclick' );

function bluetera_swatch_onclick() { ?>

    <script type='text/javascript'>
        
        
  
  const images = {
    'ecorigidswatches_Berry':"https://www.laserfelt.com/wp-content/uploads/2021/06/BerryHexagon.jpg",
    'ecorigidswatches_Black':"https://www.laserfelt.com/wp-content/uploads/2021/06/BlackHexagon.jpg", 
    'ecorigidswatches_Brown':"https://www.laserfelt.com/wp-content/uploads/2021/06/BrownHexagon.jpg"
  };
  
  //select all elements with data-color attribute
  const swatch = document.querySelectorAll('[id]'); 

  swatch.forEach(element => {
    element.addEventListener('click', () => {
      let color = element.getAttribute('id');
      document.getElementById("selected-swatch").src = images[color];
    });
  });
  

    </script>
    <?php
}
watbbzwu

watbbzwu1#

var black = document.getElementById("ecorigidswatches_Black");
if (black.checked = true) {
  document.getElementById('selected-swatch').src="https://www.laserfelt.com/wp-content/uploads/2021/06/BlackHexagon.jpg";
} elseif (condition2) {
  document.getElementById('selected-swatch').src="https://www.laserfelt.com/wp-content/uploads/2021/06/color.jpg";
}
a1o7rhls

a1o7rhls2#

要使用数组和JavaScript循环图像源:
1.创建包含图像源的数组:
1.每当用户单击图像时,将调用changeImage()函数,该函数更新src属性以指向数组中的下一个图像

const images = [
    "https://placeimg.com/170/170/nature",
    "https://placeimg.com/170/170/people", 
    "https://placeimg.com/170/170/tech"
  ];
  let currentIndex = 0;  // Keep track of which image is currently displayed

  function changeImage() {
    document.getElementById("myImage").src = images[currentIndex];
    currentIndex = (currentIndex + 1) % images.length;  // Move on to next image
  }

  // Call the changeImage function whenever the user clicks the image
  document.getElementById("myImage").addEventListener("click", changeImage);
<img id="myImage" src="https://placeimg.com/170/170/any">

编辑:创建一个带有红、蓝、绿色属性的对象图像。它选择所有带有data-color属性的元素,并附加一个单击事件侦听器。单击时,它从data-color属性中检索颜色值,并更新图像源。
一个二个一个一个
额外:

ul {
    display: flex;
    list-style-type: none; 
    padding: 0;
  }
  
  li {
    margin-right: 10px; /* Add some space between items */
  }
  
  button {
    width: 50px;
    height: 50px;
    border-radius: 50px;
    background: none;
    border: none;
    margin: 0;
    padding: 0;
    font-family: inherit;
    font-size: inherit;
    cursor: pointer;
    outline: none;
  }
  
  [data-color=red] {
    background-color: red;
  }
  [data-color=blue] {
    background-color: blue;
  }
  [data-color=green] {
    background-color: green;
  }
  
  .sr-only {
    position: absolute;
    left: -10000px;
    width: 1px;
    height: 1px;
    top: auto;
    overflow: hidden;
  }
<ul>
  <li>
    <button data-color="red">
      <span class="sr-only">Red Jacket</span>
    </button>
  </li>
  <li>
    <button data-color="blue">
      <span class="sr-only">Blue Jacket</span>
    </button>
  </li>
  <li>
    <button data-color="green">
      <span class="sr-only">Green Jacket</span>
    </button>
  </li>
</ul>

相关问题