JavaScript实现轮播图案例

yizhihongxing

JavaScript实现轮播图是网页开发中比较常见的功能,它可以让一组图片或内容不断轮流展示,增强页面的交互性和视觉效果。下面是JavaScript实现轮播图的完整攻略:

步骤一:结构与样式

首先,在HTML页面中创建放置轮播图的容器,一般是一个div标签;然后在容器中添加若干个显示内容的div,每个div中放置一张图片、一段文本等具体内容。为了让轮播图正常展示,需要对容器和div设置样式,使其按照设计展示。

<div class="slide-container">
  <div class="slide-item">
    <img src="slide1.jpg" alt="slide1" />
    <p>这是第一张轮播图</p>
  </div>
  <div class="slide-item">
    <img src="slide2.jpg" alt="slide2" />
    <p>这是第二张轮播图</p>
  </div>
  <div class="slide-item">
    <img src="slide3.jpg" alt="slide3" />
    <p>这是第三张轮播图</p>
  </div>
</div>

<style>
.slide-container {
  width: 600px;
  height: 400px;
  position: relative;
  overflow: hidden;
}
.slide-item {
  position: absolute;
  top: 0;
  left: 0;
  width: 600px;
  height: 400px;
  display: none;
}
.slide-item img {
  width: 100%;
  height: 100%;
}
</style>

步骤二:JavaScript实现

接下来,使用JavaScript代码实现轮播图。具体实现步骤如下:

1. 自动播放

利用定时器函数setInterval来定期切换轮播图,为了保证用户体验,在每次切换前需要先停止之前的定时器。

var slideIndex = 0;  // 当前轮播图的下标
var slideInterval = 3000;  // 轮播时间间隔

function startSlide() {
  stopSlide();  // 停止之前的定时器
  var slideItems = document.getElementsByClassName('slide-item');
  if (slideIndex >= slideItems.length) {
    slideIndex = 0;  // 轮播图已展示完毕,从头开始
  }
  slideItems[slideIndex].style.display = 'block';
  slideIndex++;
  setTimeout(startSlide, slideInterval);  // 启动新的定时器
}

function stopSlide() {
  var slideItems = document.getElementsByClassName('slide-item');
  for (var i = 0; i < slideItems.length; i++) {
    slideItems[i].style.display = 'none';
  }
  clearTimeout();  // 清除之前的定时器
}

2. 左右切换

为了满足用户手动控制轮播图切换的需求,可以添加左右切换的按钮,切换按钮的单击事件监听函数中使用索引值的方式来切换轮播图。

function nextSlide() {
  slideIndex++;
  if (slideIndex >= slideItems.length) {
    slideIndex = 0;  // 如果已经展示完最后一张轮播图,从头开始
  }
  stopSlide();  // 停止自动播放
  displaySlide();
}

function prevSlide() {
  slideIndex--;
  if (slideIndex < 0) {
    slideIndex = slideItems.length - 1;  // 如果已经展示完第一张轮播图,回到最后一张
  }
  stopSlide();  // 停止自动播放
  displaySlide();
}

function displaySlide() {
  slideItems[slideIndex].style.display = 'block';
}

document.getElementById('next-btn').addEventListener('click', nextSlide);
document.getElementById('prev-btn').addEventListener('click', prevSlide);

示例说明一

下面我们以哔哩哔哩直播的轮播图为例,分析其实现过程。

结构和样式部分

<div class="banner">
  <a href=""><img src="//i0.hdslb.com/bfs/live/9ec7aa3d7f4c08bb35bdda5d06b9c8e569c4d844.jpg" alt="皮神重建x赛衣火速上新!" /></a>
  <a href=""><img src="//i0.hdslb.com/bfs/live/a6c437ee92ed1e3d36d8f99709dc573136161440.jpg" alt="B站手游再添新作:情人节爱意时装来袭!"/></a>
  <a href=""><img src="//i0.hdslb.com/bfs/live/1e252cdd4eb485a28a7073b8dd1bd8c687b6abc3.jpg" alt="嗨起来B~你听说过雀巢咖啡新品吗?"/></a>
  <div class="banner-pagination"></div>
</div>

<style>
.banner {
  width: 100%;
  height: 400px;
  position: relative;
  overflow: hidden;
}
.banner img {
  width: 100%;
  height: 400px;
}
.banner-pagination {
  position: absolute;
  bottom: 10px;
  right: 10px;
  z-index: 1;
}
.banner-pagination span {
  display: inline-block;
  margin: 0 5px;
  width: 16px;
  height: 16px;
  border-radius: 8px;
  cursor: pointer;
  background-color: #fff;
}
.banner-pagination span.active {
  background-color: #00A1D6;
}
</style>

JavaScript部分

var bannerIndex = 0;
var bannerInterval = 3000;
var bannerItems = document.querySelectorAll('.banner img');
var paginationItems = document.querySelectorAll('.banner-pagination span');

function playBanner() {
  var prevIndex = bannerIndex;
  bannerIndex++;
  if (bannerIndex >= bannerItems.length) {
    bannerIndex = 0;
  }
  bannerItems[prevIndex].classList.remove('active');
  bannerItems[bannerIndex].classList.add('active');
  paginationItems[prevIndex].classList.remove('active');
  paginationItems[bannerIndex].classList.add('active');
}

var bannerTimer = setInterval(playBanner, bannerInterval);

document.querySelector('.banner').addEventListener('mouseover', function() {
  clearInterval(bannerTimer);
});

document.querySelector('.banner').addEventListener('mouseout', function() {
  bannerTimer = setInterval(playBanner, bannerInterval);
});

for (var i = 0; i < paginationItems.length; i++) {
  paginationItems[i].addEventListener('click', function() {
    clearInterval(bannerTimer);
    var prevIndex = bannerIndex;
    bannerIndex = Array.prototype.indexOf.call(paginationItems, this);
    bannerItems[prevIndex].classList.remove('active');
    bannerItems[bannerIndex].classList.add('active');
    paginationItems[prevIndex].classList.remove('active');
    paginationItems[bannerIndex].classList.add('active');
  });
}

在这个实现中,引入了轮播图的分页指示器,同时在容器上绑定鼠标移入和移出事件,实现鼠标悬停自动停止轮播图的功能。

示例说明二

下面我们以京东E卡优惠页面为例,分析其实现过程。

结构和样式部分

<div class="card-slider">
  <ul class="card-list">
    <li class="card-item">
      <a href="" class="card-link">
        <div class="card-img">
          <img src="//img11.360buyimg.com/img/s750x337_jfs/t1/18156/30/8258/139565/5c66807aE74d87c51/866a465f629a7bd2.jpg" alt="360设计"/>
        </div>
        <div class="card-info">
          <h3 class="card-title">360设计卡活动</h3>
          <p class="card-desc">现在购买360设计卡,最高可享折扣8%</p>
        </div>
      </a>
    </li>
    <li class="card-item">
      <a href="" class="card-link">
        <div class="card-img">
          <img src="//img11.360buyimg.com/img/s750x337_jfs/t21138/351/255661067/214259/8239d4ec/5b1fc11aN33bae6b0.jpg" alt="公共英语"/>
        </div>
        <div class="card-info">
          <h3 class="card-title">公共英语考试</h3>
          <p class="card-desc">购买公共英语考试服务,享9.5折优惠</p>
        </div>
      </a>
    </li>
  </ul>
  <div class="card-pagination"></div>
</div>

<style>
.card-slider {
  position: relative;
  overflow: hidden;
  width: 750px;
  height: 337px;
}
.card-list {
  position: absolute;
  left: 0;
  top: 0;
}
.card-item {
  float: left;
  margin-right: 30px;
  width: 323px;
  height: 337px;
}
.card-item:last-child {
  margin-right: 0;
}
.card-img img {
  width: 323px;
  height: 187px;
}
.card-title {
  font-size: 18px;
}
.card-desc {
  font-size: 14px;
  color: #999;
}
.card-pagination {
  position: absolute;
  bottom: 10px;
  right: 10px;
  z-index: 1;
}
.card-pagination span {
  display: inline-block;
  margin: 0 5px;
  width: 10px;
  height: 10px;
  border-radius: 5px;
  cursor: pointer;
  background-color: #fff;
}
.card-pagination span.active {
  background-color: #ff0000;
}
</style>

JavaScript部分

var sliderIndex = 0;
var sliderInterval = 3000;
var sliderItems = document.querySelectorAll('.card-item');
var paginationItems = document.querySelectorAll('.card-pagination span');

function playSlider() {
  var prevIndex = sliderIndex;
  sliderIndex++;
  if (sliderIndex >= sliderItems.length) {
    sliderIndex = 0;
  }
  for (var i = 0; i < sliderItems.length; i++) {
    sliderItems[i].style.opacity = 0;
  }
  sliderItems[prevIndex].classList.remove('slider-active');
  sliderItems[sliderIndex].classList.add('slider-active');
  paginationItems[prevIndex].classList.remove('active');
  paginationItems[sliderIndex].classList.add('active');
  sliderItems[sliderIndex].style.opacity = 1;
}

var sliderTimer = setInterval(playSlider, sliderInterval);

for (var i = 0; i < paginationItems.length; i++) {
  paginationItems[i].addEventListener('click', function() {
    clearInterval(sliderTimer);
    var prevIndex = sliderIndex;
    sliderIndex = Array.prototype.indexOf.call(paginationItems, this);
    for (var j = 0; j < sliderItems.length; j++) {
      sliderItems[j].style.opacity = 0;
    }
    sliderItems[prevIndex].classList.remove('slider-active');
    sliderItems[sliderIndex].classList.add('slider-active');
    paginationItems[prevIndex].classList.remove('active');
    paginationItems[sliderIndex].classList.add('active');
    sliderItems[sliderIndex].style.opacity = 1;
    sliderTimer = setInterval(playSlider, sliderInterval);
  });
}

在这个实现中,轮播图的切换效果采用了CSS3中的opacity属性,实现了平稳的动画效果。同时,实现了点击分页指示器切换轮播图的功能,使用数组的indexOf方法获取当前点击的指示器的下标。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现轮播图案例 - Python技术站

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

相关文章

  • 以前写的两个CSS树形菜单

    当初写两个CSS树形菜单的时候,主要考虑的是可扩展性、易用性和可读性,这里提供一份完整的建议和攻略,方便您学习和使用。 CSS树形菜单 HTML结构 首先,我们需要准备合适的HTML结构,来实现树形菜单。一般而言,在HTML结构中,我们需要使用ul(unordered list,无序列表)元素和li(list item,列表项)元素来搭建树形结构。 示例代码…

    css 2023年6月10日
    00
  • css实现文字竖排效果示例代码

    要实现文字竖排效果,我们可以使用CSS的writing-mode属性来设置文本的排列方式。writing-mode属性用于设置文本的书写模式,其可选值包括: horizontal-tb:水平方向从左到右排列,垂直方向从上到下排列,这是默认值。 vertical-rl:垂直方向从上到下排列,水平方向从右到左排列。 vertical-lr:垂直方向从上到下排列,…

    css 2023年6月9日
    00
  • Webpack中雪碧图插件使用详解

    我为您详细介绍「Webpack中雪碧图插件使用详解」的完整攻略。 简介 在前端开发中,为了加快网站速度和优化用户体验,常常会使用雪碧图技术来减少图片请求次数。Webpack作为当前最流行的前端构建工具之一,提供了多个处理雪碧图的插件,本篇攻略将详细讲解如何使用Webpack中的雪碧图插件。 雪碧图插件介绍 Webpack中的雪碧图插件通常可以分为两类,分别是…

    css 2023年6月9日
    00
  • CSS3中box-shadow的用法介绍

    第一步:了解box-shadow box-shadow是CSS3中用来创建阴影的属性,它可以为一个元素添加一个或多个阴影。box-shadow的语法如下: box-shadow: h-shadow v-shadow blur spread color inset; 其中,各个参数如下: h-shadow: 必选,表示水平阴影的位置,可取正值(阴影在右边)或负…

    css 2023年6月9日
    00
  • 详解CSS盒子塌陷的5种解决方法

    详解CSS盒子塌陷的5种解决方法 在CSS布局过程中,经常会遇到盒子塌陷的问题。盒子塌陷是指由于子元素的高度和父级元素的高度不同,导致父级元素高度无法撑起子元素的情况。 盒子塌陷的原因 盒子塌陷的原因主要有两种: 浮动元素未清除浮动,导致父级元素不包含浮动元素。 父级元素设置了固定高度或最小高度,导致高度无法自适应。 解决方法 方法一:清除浮动 清除浮动可通…

    css 2023年6月10日
    00
  • CSS3中Animation属性的使用详解

    CSS3中Animation属性的使用详解 CSS3中的Animation属性可以用来创建动画效果,通过设置关键帧和动画属性,可以实现各种各样的动画效果。本攻略将详细讲解Animation属性的使用方法,包括关键帧的设置、动画属性的设置、动画的应用等,并提供两个示例说明。 1. 关键帧的设置 关键帧是指动画中的关键点,可以通过设置关键帧来控制动画的变化。在C…

    css 2023年5月18日
    00
  • CSS圆角

    CSS圆角是一种常用的样式设计元素,可以给网页设计带来更加美观、优雅的效果。在CSS中,我们可以通过border-radius属性来实现圆角效果。下面是CSS圆角的完整攻略与代码示例。 1.基本语法 border-radius属性用于设置元素的圆角。可以设置四个圆角半径,分别对应左上角、右上角、右下角和左下角。也可以只设置两个值,分别对应水平方向和竖直方向的…

    Web开发基础 2023年3月30日
    00
  • 链接伪类(:hover)CSS背景图片有闪动BUG的解决方法

    CSS中的链接伪类:hover可以让当鼠标悬停在链接上时改变链接的外观。然而,当我们将背景图片应用于链接,并使用:hover来改变背景图片时,有可能会出现背景图片闪烁的问题。接下来,我们给出两个示例,演示这个问题以及如何解决它。 问题示例 以下示例HTML代码中有两个链接,每个链接都有自己的背景图片,并在:hover状态下改变背景图片。但是,当鼠标移动到链接…

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