js仿小米官网图片轮播特效

yizhihongxing

下面是JS仿小米官网图片轮播特效的完整攻略。

1. 实现思路

轮播图可以利用 JavaScript 配合 CSS 动画来方式实现。我们可以利用 JavaScript 的定时器 setInterval 来不断地改变图片的位置,同时利用 CSS 的动画为图片添加渐变效果。

具体实现步骤如下:

  • 在 HTML 中添加轮播图的容器,包含各个图片和指示器。
  • 在 CSS 中为轮播图容器和图片添加样式,包括指定容器的宽高、定位方式等,以及实现图片的渐变效果。
  • 在 JavaScript 中获取轮播图容器和图片元素,计算每张图片的宽度、总数量等,然后使用 setInterval 实现轮播逻辑。
  • 为轮播图容器添加鼠标移入移出监听事件,当鼠标移入容器时停止轮播,移出时重新开始。

2. 代码实现

下面是使用纯 JavaScript 实现的一些示例代码:

2.1 HTML 代码

<div class="carousel-container">
  <ul class="carousel-list">
    <li>
      <img src="img1.jpg" alt="img1">
    </li>
    <li>
      <img src="img2.jpg" alt="img2">
    </li>
    <li>
      <img src="img3.jpg" alt="img3">
    </li>
    <li>
      <img src="img4.jpg" alt="img4">
    </li>
  </ul>
  <div class="carousel-nav">
    <span class="nav-dot active"></span>
    <span class="nav-dot"></span>
    <span class="nav-dot"></span>
    <span class="nav-dot"></span>
  </div>
</div>

2.2 CSS 代码

.carousel-container {
  position: relative;
  width: 640px;
  height: 360px;
  overflow: hidden;
}

.carousel-list {
  list-style: none;
  margin: 0;
  padding: 0;
  width: 2560px;
  animation: carousel 15s infinite;
}

.carousel-list li {
  float: left;
  width: 640px;
  height: 360px;
}

.carousel-list li img {
  display: block;
  width: 100%;
  height: 100%;
}

.carousel-nav {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
}

.nav-dot {
  display: inline-block;
  margin: 0 8px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background-color: #bbb;
  cursor: pointer;
}

.active {
  background-color: #f60;
}

@keyframes carousel {
  0% {
    left: 0;
  }
  20% {
    left: 0;
  }
  25% {
    left: -640px;
  }
  45% {
    left: -640px;
  }
  50% {
    left: -1280px;
  }
  70% {
    left: -1280px;
  }
  75% {
    left: -1920px;
  }
  95% {
    left: -1920px;
  }
  100% {
    left: -2560px;
  }
}

2.3 JavaScript 代码

// 获取轮播图的元素
var carouselContainer = document.querySelector('.carousel-container');
var carouselList = document.querySelector('.carousel-list');
var carouselNav = document.querySelector('.carousel-nav');
var dots = document.querySelectorAll('.nav-dot');

// 计算每张图片的宽度和总数量
var picWidth = carouselContainer.offsetWidth;
var picNum = carouselList.children.length;

// 定义当前图片的索引
var currentIndex = 0;

// 通过设置 left 值实现轮播效果
function carousel() {
  currentIndex++;
  if (currentIndex >= picNum) {
    currentIndex = 0;
  }
  carouselList.style.left = -currentIndex * picWidth + 'px';
  setActiveDot(currentIndex);
}

// 设置当前激活的小圆点
function setActiveDot(index) {
  for (var i = 0; i < dots.length; i++) {
    dots[i].classList.remove('active');
  }
  dots[index].classList.add('active');
}

// 切换到指定的图片
function goTo(index) {
  currentIndex = index;
  carouselList.style.left = -currentIndex * picWidth + 'px';
  setActiveDot(currentIndex);
}

// 监听鼠标移入移出事件
carouselContainer.addEventListener('mouseover', function() {
  clearInterval(timer);
});

carouselContainer.addEventListener('mouseout', function() {
  timer = setInterval(carousel, 3000);
});

// 监听小圆点点击事件
carouselNav.addEventListener('click', function(event) {
  if (event.target.classList.contains('nav-dot')) {
    var index = Array.prototype.indexOf.call(dots, event.target);
    goTo(index);
  }
});

// 初始化
var timer = setInterval(carousel, 3000);

3. 注意事项

  1. 轮播图容器和图片的宽高必须设定为固定值,否则无法实现轮播效果。
  2. 轮播图容器需要设置 overflow: hidden; 才能实现图片的切换效果。
  3. 鼠标移入轮播图容器时,必须停止定时器,否则会产生冲突。
  4. 轮播图需要有指示器来提示当前图片的位置,用户可以点击指示器快速切换图片。
  5. 在移动设备上需要注意触摸事件的使用,可以使用 touchstart 和 touchend 实现手指滑动切换图片的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js仿小米官网图片轮播特效 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • python-web根据元素属性进行定位的方法

    当我们使用Python进行Web自动化测试时,定位元素是非常重要的一步,其中根据元素属性进行定位的方法也非常常用。下面,我将详细讲解如何使用Python根据元素属性进行定位。 步骤一:安装必要的库 在进行元素定位之前,我们需要安装selenium和webdriver库,可以使用以下命令进行安装: pip install selenium pip instal…

    css 2023年6月10日
    00
  • 深入理解Webpack 中路径的配置

    概述 Webpack 中的路径配置在模块打包和前端项目的开发中非常重要。任何一个前端工程师都需要了解路径配置的相关知识。路径配置通过使用 alias、resolve、module 和其他方式从根路径中解析出正确的模块路径。下面将具体介绍这些配置项的作用及使用方式。 Alias Alias 是 Webpack 的一个配置项,用于配置模块的别名。通过配置别名,可…

    css 2023年6月9日
    00
  • Bootstrap作品展示站点实战项目2

    Bootstrap作品展示站点实战项目2旨在帮助使用Bootstrap框架的开发人员学习如何创建响应式的作品展示站点。以下是完整攻略的步骤: 1. 确定布局和内容 首先,需要确定网站的布局、颜色和内容。可以使用Adobe XD或Figma等工具,创建一个原型或模板。确定需要展示的内容和相应的布局,并确定在哪些页面上展示这些内容。然后根据需求确定Bootstr…

    css 2023年6月9日
    00
  • 使用CSS改变图片颜色的100种方法(值得收藏)

    该攻略主要介绍了使用 CSS 语法进行图片颜色修改的一百种方式,旨在帮助开发者们快速了解并掌握这些方法。 使用 CSS 改变图片颜色的 100 种方法 为了更好地阐述这些方法,我们先准备一张待处理的图片,该图片会在接下来的示例中被反复引用。下面是对该图片的描述和代码: 待处理图片 描述:一张黑色的背景,上面有一些紫色的图案。 代码: <img src=…

    css 2023年6月9日
    00
  • React如何实现浏览器打印部分内容详析

    下面是React如何实现浏览器打印部分内容详析的完整攻略。 前置知识 在了解如何实现React打印部分内容之前,需要有以下知识: React的基础知识 CSS打印样式的基础知识,比如@media print和相关属性 前端JavaScript实现内置浏览器打印功能(比如window.print())的方法 React中实现部分内容的打印 在React中,实现…

    css 2023年6月10日
    00
  • 使用css属性屏蔽鼠标事件的方法(鼠标点击可穿透上层元素)

    要屏蔽鼠标事件,常用的方法是使用CSS的pointer-events属性。这个属性控制元素是否响应用户的鼠标或手势事件。设置为none时,元素不会响应此类事件,并允许它们穿透到下面的元素,可以用来模拟类似遮罩的效果。下面是一些详细的步骤,以及两个示例说明。 步骤一:设置需要屏蔽事件的元素的CSS代码 首先,我们需要设置需要屏蔽事件的元素的CSS代码。在这个元…

    css 2023年6月9日
    00
  • CSS中@用法小结(示例详解)

    以下是“CSS中@用法小结(示例详解)”的完整攻略: CSS中@用法小结 在 CSS 中,@ 符号用于定义一些特殊的规则和语法。以下是一些常用的 @ 规则。 @import 规则 @import 规则用于导入外部样式表,以下是一个示例: @import url("styles.css"); @media 规则 @media 规则用于定义媒…

    css 2023年5月18日
    00
  • 单元素利用css实现多重边框效果示例代码

    下面是关于单元素利用CSS实现多重边框的攻略。 理解多重边框的概念 多重边框是指在一个元素的边缘上不止是一条描边线。在Web开发中,我们可以使用多重边框来增强网页的视觉效果。多重边框有许多种实现方式,其中一种是使用CSS的box-shadow属性。 使用box-shadow来实现多重边框 我们可以使用box-shadow属性来实现多重边框的效果。box-sh…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部