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