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

下面是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日

相关文章

  • CSS 关于浮动

    CSS 关于浮动的完整攻略 CSS浮动是一种常用的布局方式,它可以让元素脱离文档流并向左或向右浮动,从而实现多列布局、文字环绕图片等效果。本攻略将详细讲解CSS浮动的相关知识点,包括浮动的基本概念、浮动的属性、浮动的清除方法等,并提供两个示例说明。 1. 浮动的基本概念 浮动是CSS中的一种布局方式,它可以让元素脱离文档流并向左或向右浮动。浮动元素会尽可能地…

    css 2023年5月18日
    00
  • 使用D3.js制作图表详解

    使用D3.js制作图表可以分为以下几个步骤: 步骤一:安装D3.js 首先需要安装D3.js。可以通过官方网站下载或使用npm安装。 npm install d3 步骤二:准备数据 在制作图表前,需要准备好需要展示的数据。D3.js可以处理各种形式的数据,包括数组、json等。 步骤三:选择元素与绑定数据 在D3.js中,可以使用select方法选择指定元素…

    css 2023年6月10日
    00
  • Vue开发中出现Loading Chunk Failed的问题解决

    问题描述:在Vue开发中,有时候会出现Loading Chunk Failed的问题,这种情况下会导致项目无法正常进行。那么这个问题该如何解决呢? 解决方案:出现Loading Chunk Failed的问题,一般都与Webpack有关。我们可以尝试以下几种解决方案: 重新安装依赖包。 有时候出现的问题可能是由于项目中某些依赖包出现了问题。这时候,我们可以删…

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

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

    css 2023年6月9日
    00
  • CSS 垂直居中的5种实现方法

    下面是CSS垂直居中的五种实现方法的详细攻略: 方法一:使用flexbox布局 可以使用flexbox布局的align-items属性来进行垂直居中,值设置为center即可。具体实现如下: .container { display: flex; align-items: center; } 示例说明: <div class="contain…

    css 2023年6月10日
    00
  • jquery模拟实现鼠标指针停止运动事件

    实现鼠标指针停止运动事件可以通过以下步骤实现: 获取鼠标位置并设置定时器 我们可以利用mousemove事件,获取鼠标位置,并将其保存在一个变量中。然后,设置一个定时器,每隔一段时间检查鼠标位置是否发生变化。 let lastMouseX, lastMouseY; $(document).on(‘mousemove’, function(e) { lastM…

    css 2023年6月9日
    00
  • 小程序显示弹窗时禁止下层的内容滚动实现方法

    要禁止下层的内容滚动,我们可以通过以下步骤实现: 1. 给body元素添加样式 我们可以给 <body> 元素添加样式来实现下层内容的禁止滚动。将下面的样式代码添加到你页面的CSS文件或页面内嵌的style标签中。 body.modal-open { overflow: hidden; } 这将将窗口的滚动条隐藏,并禁止滚动。 2. JS代码 为…

    css 2023年6月10日
    00
  • css3手动实现pc端横向滚动

    针对“css3手动实现pc端横向滚动”的完整攻略,我将从下面这几个部分来逐一讲解: 实现横向滚动的前提 实现原理介绍 实现步骤及示例说明 下面我们来逐一讲解。 1. 实现横向滚动的前提 在 CSS3 中,实现横向滚动需要使用到 overflow-x 属性,它的取值为 scroll 或 auto。 在实现横向滚动的时候,首先需要保证有足够的空间来容纳横向滚动的…

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