JavaScript - 通过单击带有 addEventListener 的缩略图更改预览图像
JavaScript - Changing preview image by clicking a thumbnail image with addEventListener only
我正在尝试创建一个非常简单、纯粹的 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
(function(){
let image-preview = document.getElementById("gallery-preview");
let image-thumbnail = document.getElementById("gallery-thumbnails");
image-thumbnail.addEventListener("click", imageChanger);
function imageChanger()
{
//something here
}
})();
(function(){
let imagePreview = document.querySelector("#gallery-preview img");
let imageThumbnail = document.getElementById("gallery-thumbnails");
imageThumbnail.addEventListener("click", imageChanger);
function imageChanger(e) {
imagePreview.src = e.target.src;
}
})();
不要在 JavaScript 变量名中使用连字符。破折号用于减法。您可以在 class 名称和元素 ID 中使用破折号,但不能作为 JavaScript 变量 names.
您的 html 需要 class 用于所有图片。
<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 附加到它时,其中一些可能不存在。
所谓异步,是指 JavaScript 运行s 并且不会在执行下一行代码之前等待长进程完成。您可以做一些快速的事情,例如添加几个数字,但是当您从服务器获取数据并将其呈现在 html 页面中时,这些事情需要时间。您需要确保仅在 它们准备就绪后才对其进行处理。
为确保 html 已加载,请查看 jquery 的 $(document).ready() {}。您需要包含 Jquery 和 <script>
标签才能使用它。
$(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;
}
我正在尝试创建一个非常简单、纯粹的 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
(function(){
let image-preview = document.getElementById("gallery-preview");
let image-thumbnail = document.getElementById("gallery-thumbnails");
image-thumbnail.addEventListener("click", imageChanger);
function imageChanger()
{
//something here
}
})();
(function(){
let imagePreview = document.querySelector("#gallery-preview img");
let imageThumbnail = document.getElementById("gallery-thumbnails");
imageThumbnail.addEventListener("click", imageChanger);
function imageChanger(e) {
imagePreview.src = e.target.src;
}
})();
不要在 JavaScript 变量名中使用连字符。破折号用于减法。您可以在 class 名称和元素 ID 中使用破折号,但不能作为 JavaScript 变量 names.
您的 html 需要 class 用于所有图片。
<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 附加到它时,其中一些可能不存在。
所谓异步,是指 JavaScript 运行s 并且不会在执行下一行代码之前等待长进程完成。您可以做一些快速的事情,例如添加几个数字,但是当您从服务器获取数据并将其呈现在 html 页面中时,这些事情需要时间。您需要确保仅在 它们准备就绪后才对其进行处理。
为确保 html 已加载,请查看 jquery 的 $(document).ready() {}。您需要包含 Jquery 和 <script>
标签才能使用它。
$(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;
}