Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-仅通过使用addEventListener单击缩略图更改预览图像_Javascript_Html_Image_Addeventlistener_Image Gallery - Fatal编程技术网

JavaScript-仅通过使用addEventListener单击缩略图更改预览图像

JavaScript-仅通过使用addEventListener单击缩略图更改预览图像,javascript,html,image,addeventlistener,image-gallery,Javascript,Html,Image,Addeventlistener,Image Gallery,我正在尝试创建一个非常简单的纯JavaScript图像库,在其中单击较小的图像缩略图时,它会将较大的预览图像更改为刚才单击的缩略图 我是JavaScript新手,我一直在尝试使用它。我还试图避免在HTML中使用onClick,因为有人告诉我这是一种糟糕的做法。因此,我发现使用addEventListener似乎是另一种方法 唯一的问题是,我不知道该怎么办。大多数其他教程都使用onClick函数,这并不理想 我想知道是否有人可以帮助我,甚至提供一些其他来源给我一个开始 以下是HTML和我的Java

我正在尝试创建一个非常简单的纯JavaScript图像库,在其中单击较小的图像缩略图时,它会将较大的预览图像更改为刚才单击的缩略图

我是JavaScript新手,我一直在尝试使用它。我还试图避免在HTML中使用onClick,因为有人告诉我这是一种糟糕的做法。因此,我发现使用addEventListener似乎是另一种方法

唯一的问题是,我不知道该怎么办。大多数其他教程都使用onClick函数,这并不理想

我想知道是否有人可以帮助我,甚至提供一些其他来源给我一个开始

以下是HTML和我的JavaScript起点:

HTML

<section class="image-gallery">
        <h4>IMAGE GALLERY</h4>

        <section id="gallery-preview">
          <img src="images/gallery1.png" alt="image-gallery-1">
        </section>

        <section id="gallery-thumbnails">
          <img src="images/gallery1.png" alt="image-gallery-1">     
          <img src="images/gallery2.png" alt="image-gallery-2">
          <img src="images/gallery3.png" alt="image-gallery-3">
          <img src="images/gallery4.png" alt="image-gallery-4">
          <img src="images/gallery5.png" alt="image-gallery-5">
        </section> 

      </section>

不要在JavaScript变量名中使用连字符。破折号表示减法。可以在类名和元素id中使用破折号,但不能作为JavaScript变量名称使用

您的html需要为所有图像创建一个类

<section id="gallery-thumbnails">
   <img class="my-images" src="images/gallery1.png" alt="image-gallery-1">     
   <img class="my-images" src="images/gallery2.png" alt="image-gallery-2">
   <img class="my-images" src="images/gallery3.png" alt="image-gallery-3">
   <img class="my-images" src="images/gallery4.png" alt="image-gallery-4">
   <img class="my-images" src="images/gallery5.png" alt="image-gallery-5">
</section> 

接下来,JavaScript异步运行。你需要明白这一点。这意味着在加载所有html之前,不应尝试运行“imageChanger()”函数。如果html仍在加载,则当函数尝试将eventListener附加到html时,其中一些html可能不存在

通过异步,它意味着JavaScript运行,在执行下一行代码之前,不会等待很长的进程完成。您可以快速完成一些事情,比如添加几个数字,但是当您从服务器获取数据并在html页面中显示数据时,这些事情需要时间。您需要确保只有在它们准备好后才对它们进行操作

要确保加载html,请查看jquery的$(document).ready(){}。要使用Jquery,您需要将其包含在
标记中

$(document).ready() {

   let myImages = document.getElementsByClassName("my-image");

   //  You have more than one image in myImages.
   for (i = 0; i < myImages.length; i++) {
      myImages.addEventListener("click", imageChanger);
   }
}

// Notice this function is **outside** of document.ready.  
// You need the function immediately available.

function imageChanger()
  {
     // "this" is the element you clicked.
     this.style.height = 100px;
     this.style.width = 100px; 
  }
$(document).ready(){
让myImages=document.getElementsByCassName(“我的图像”);
//您在myImages中有多个图像。
对于(i=0;i
不要在JavaScript变量名中使用连字符。破折号表示减法。可以在类名和元素id中使用破折号,但不能作为JavaScript变量名称使用

您的html需要为所有图像创建一个类

<section id="gallery-thumbnails">
   <img class="my-images" src="images/gallery1.png" alt="image-gallery-1">     
   <img class="my-images" src="images/gallery2.png" alt="image-gallery-2">
   <img class="my-images" src="images/gallery3.png" alt="image-gallery-3">
   <img class="my-images" src="images/gallery4.png" alt="image-gallery-4">
   <img class="my-images" src="images/gallery5.png" alt="image-gallery-5">
</section> 

接下来,JavaScript异步运行。你需要明白这一点。这意味着在加载所有html之前,不应尝试运行“imageChanger()”函数。如果html仍在加载,则当函数尝试将eventListener附加到html时,其中一些html可能不存在

通过异步,它意味着JavaScript运行,在执行下一行代码之前,不会等待很长的进程完成。您可以快速完成一些事情,比如添加几个数字,但是当您从服务器获取数据并在html页面中显示数据时,这些事情需要时间。您需要确保只有在它们准备好后才对它们进行操作

要确保加载html,请查看jquery的$(document).ready(){}。要使用Jquery,您需要将其包含在
标记中

$(document).ready() {

   let myImages = document.getElementsByClassName("my-image");

   //  You have more than one image in myImages.
   for (i = 0; i < myImages.length; i++) {
      myImages.addEventListener("click", imageChanger);
   }
}

// Notice this function is **outside** of document.ready.  
// You need the function immediately available.

function imageChanger()
  {
     // "this" is the element you clicked.
     this.style.height = 100px;
     this.style.width = 100px; 
  }
$(document).ready(){
让myImages=document.getElementsByCassName(“我的图像”);
//您在myImages中有多个图像。
对于(i=0;i
Gwen刚刚教我如何缩短这一切。非常感谢。哦,那么格温所说的仍然适用于你所说的?是的!我只是设法让它需要更多的代码行。;-)我不知道document.querySelector()。我注意到您将调整大小的图像放在imagePreview标记中,而不是更改图像标记本身。然而,前提仍然是一样的。我刚刚调整了图像元素本身的大小。格温刚刚教我如何缩短这一切。非常感谢。哦,那么格温所说的仍然适用于你所说的?是的!我只是设法让它需要更多的代码行。;-)我不知道document.querySelector()。我注意到您将调整大小的图像放在imagePreview标记中,而不是更改图像标记本身。然而,前提仍然是一样的。我刚刚调整了图像元素本身的大小。