📜  带引导程序的图像滑块 - Html (1)

📅  最后修改于: 2023-12-03 14:54:02.360000             🧑  作者: Mango

带引导程序的图像滑块 - Html

本文将介绍如何使用HTML和JavaScript构建带有引导程序的图像滑块。

实现步骤
第一步:创建HTML结构

首先,我们需要在HTML文件中创建图像滑块的结构。我们可以使用 div 元素创建一个包裹整个图像滑块组件的容器,然后在其中创建 img 元素和 input 元素。

<div class="slider-container">
  <img src="image.jpg" alt="Image">
  <input type="range" min="0" max="100" value="50" class="slider">
</div>
第二步:添加样式

接下来,我们需要添加一些样式来美化图像滑块。我们可以使用CSS为容器和滑块添加样式,并将图像设置为容器的背景。我们还可以使用伪元素来创建引导程序,以便用户了解如何使用图像滑块。

.slider-container {
  position: relative;
  display: inline-block;
  background: #f5f5f5;
  border-radius: 5px;
  overflow: hidden;
  box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.1);
}

.slider-container img {
  display: block;
  width: 100%;
  height: auto;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  background: transparent;
  margin: 0;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
  box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.1);
}

.slider::-moz-range-thumb {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
  box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.1);
}

.slider-container::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 0;
  transform: translate(-100%, -50%);
  border: solid transparent;
  border-width: 10px;
  height: 0;
  width: 0;
  pointer-events: none;
}

.slider-container:hover::before {
  border-color: rgba(0, 0, 0, 0.1);
  border-left-color: #f5f5f5;
}

.slider-container:hover::after {
  opacity: 1;
}

.slider-container::after {
  content: "拖动滑块以查看更多";
  position: absolute;
  top: 50%;
  right: -90px;
  transform: translate(0, -50%);
  white-space: nowrap;
  font-size: 14px;
  color: #f5f5f5;
  padding: 5px 10px;
  border-radius: 5px;
  background: rgba(0, 0, 0, 0.5);
  opacity: 0;
  transition: opacity 0.2s ease-in-out;
}
第三步:添加JavaScript

接下来,我们需要使用JavaScript编写代码,使得当用户拖动滑块时,图像滑块可以切换显示更多或更少的图像。我们可以通过获取滑块元素的值,然后设置背景图像的大小和位置来实现这一点。

const slider = document.querySelector(".slider");
const container = document.querySelector(".slider-container");
const image = document.querySelector(".slider-container img");

slider.addEventListener("input", function () {
  const value = slider.value;
  const width = value * (image.offsetWidth / 100);
  const height = value * (image.offsetHeight / 100);
  const x = (image.offsetWidth - width) / 2;
  const y = (image.offsetHeight - height) / 2;
  
  container.style.backgroundSize = `${width}px ${height}px`;
  container.style.backgroundPosition = `${x}px ${y}px`;
});
完整代码

下面是完整的HTML、CSS和JavaScript代码:

<div class="slider-container">
  <img src="image.jpg" alt="Image">
  <input type="range" min="0" max="100" value="50" class="slider">
</div>
.slider-container {
  position: relative;
  display: inline-block;
  background: #f5f5f5;
  border-radius: 5px;
  overflow: hidden;
  box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.1);
}

.slider-container img {
  display: block;
  width: 100%;
  height: auto;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  background: transparent;
  margin: 0;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
  box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.1);
}

.slider::-moz-range-thumb {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
  box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.1);
}

.slider-container::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 0;
  transform: translate(-100%, -50%);
  border: solid transparent;
  border-width: 10px;
  height: 0;
  width: 0;
  pointer-events: none;
}

.slider-container:hover::before {
  border-color: rgba(0, 0, 0, 0.1);
  border-left-color: #f5f5f5;
}

.slider-container:hover::after {
  opacity: 1;
}

.slider-container::after {
  content: "拖动滑块以查看更多";
  position: absolute;
  top: 50%;
  right: -90px;
  transform: translate(0, -50%);
  white-space: nowrap;
  font-size: 14px;
  color: #f5f5f5;
  padding: 5px 10px;
  border-radius: 5px;
  background: rgba(0, 0, 0, 0.5);
  opacity: 0;
  transition: opacity 0.2s ease-in-out;
}
const slider = document.querySelector(".slider");
const container = document.querySelector(".slider-container");
const image = document.querySelector(".slider-container img");

slider.addEventListener("input", function () {
  const value = slider.value;
  const width = value * (image.offsetWidth / 100);
  const height = value * (image.offsetHeight / 100);
  const x = (image.offsetWidth - width) / 2;
  const y = (image.offsetHeight - height) / 2;
  
  container.style.backgroundSize = `${width}px ${height}px`;
  container.style.backgroundPosition = `${x}px ${y}px`;
});
效果展示

带引导程序的图像滑块示例图

以上为本文介绍的带引导程序的图像滑块的完整代码及效果展示。