原生js实现网易轮播图效果

yizhihongxing

请允许我从以下几个方面详细讲解“原生JS实现网易轮播图效果”的完整攻略。

一、基本思路

网易轮播图效果涉及到图片自动切换和手动点击按钮切换两种方式。其基本思路如下:

  1. 页面初始化时,将轮播图图片都放置在容器内,然后只显示第一张图片。
  2. 利用定时器,定时调用一个函数,进行图片自动切换。
  3. 增加两个按钮,分别用于向左和向右切换图片。
  4. 给这两个按钮添加事件监听,当按钮被点击时,通过改变当前显示图片的下标,展示需要切换的图片。

二、具体实现

1. HTML结构

首先,在HTML代码中创建一个轮播图容器,并在容器中添加轮播图图片和切换按钮。

<div class="carousel">
  <img src="img/1.jpg" alt="">
  <img src="img/2.jpg" alt="">
  <img src="img/3.jpg" alt="">
  <img src="img/4.jpg" alt="">
  <img src="img/5.jpg" alt="">
  <div class="prev"></div>
  <div class="next"></div>
</div>

2. CSS样式

为了让页面更加美观,保证轮播图的基本样式,我们可以给每一张轮播图图片添加CSS样式。同时,设置轮播图容器的宽高及定位方式。

.carousel {
  position: relative;
  width: 500px;
  height: 300px;
  overflow: hidden;
  margin: 0 auto;
}

.carousel img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  transition: all 0.5s;
}

.carousel img.show {
  opacity: 1;
}

.carousel .prev,
.carousel .next {
  position: absolute;
  top: 50%;
  margin-top: -30px;
  width: 0;
  height: 0;
  border-top: 30px solid transparent;
  border-bottom: 30px solid transparent;
  cursor: pointer;
}

.carousel .prev {
  left: 10px;
  border-right: 30px solid #fff;
}

.carousel .next {
  right: 10px;
  border-left: 30px solid #fff;
  transform: rotate(180deg);
}

3. JS代码

接下来是JS代码的实现过程。

在JS代码中,首先获取到轮播图容器及其中的图片和按钮等元素,并设置当前展示的轮播图图片的下标。

const carousel = document.querySelector('.carousel') // 轮播图容器
const imgs = document.querySelectorAll('.carousel img') // 所有轮播图图片
const prev = document.querySelector('.prev') // 向前切换按钮
const next = document.querySelector('.next') // 向后切换按钮

let curIndex = 0 // 当前展示的轮播图图片下标

然后,对于图片自动切换功能的实现,我们可以使用以下代码:

// 图片自动切换功能
setInterval(() => {
  // 隐藏当前轮播图图片
  imgs[curIndex].classList.remove('show')
  // 取模运算实现循环切换功能
  curIndex = (curIndex + 1) % imgs.length
  // 显示下一张轮播图图片
  imgs[curIndex].classList.add('show')
}, 3000)

上述代码中的setInterval()方法会每隔一定时间调用一次函数,进行图片的自动切换。我们在其中先将当前展示的轮播图图片隐藏,然后对下一张轮播图图片的下标进行取模运算,从而实现轮播图的循环播放。最后,展示下一张轮播图图片。

最后,我们还需要添加向左和向右切换图片的按钮功能实现。具体代码如下:

// 向左切换图片按钮
prev.addEventListener('click', () => {
  // 隐藏当前轮播图图片
  imgs[curIndex].classList.remove('show')
  // 根据按钮切换到上一张图片
  curIndex = (imgs.length + curIndex - 1) % imgs.length
  // 显示上一张轮播图图片
  imgs[curIndex].classList.add('show')
})

// 向右切换图片按钮
next.addEventListener('click', () => {
  // 隐藏当前轮播图图片
  imgs[curIndex].classList.remove('show')
  // 根据按钮切换到下一张图片
  curIndex = (curIndex + 1) % imgs.length
  // 显示下一张轮播图图片
  imgs[curIndex].classList.add('show')
})

上述代码中的addEventListener()方法添加了按钮的事件监听,当点击按钮时,会执行对应的函数。我们先将当前展示的轮播图图片隐藏,然后根据点击的按钮切换到上一张或下一张轮播图图片。最后,展示对应的轮播图图片。

4. 示例说明

以下两个示例均为原生JS实现网易轮播图效果,可供参考:

示例一:基于ES5的实现

var carousel = document.querySelector('.carousel') // 轮播图容器
var imgs = document.querySelectorAll('.carousel img') // 所有轮播图图片
var prev = document.querySelector('.prev') // 向前切换按钮
var next = document.querySelector('.next') // 向后切换按钮

var curIndex = 0 // 当前展示的轮播图图片下标

// 图片自动切换功能
setInterval(function() {
  // 隐藏当前轮播图图片
  imgs[curIndex].classList.remove('show')
  // 取模运算实现循环切换功能
  curIndex = (curIndex + 1) % imgs.length
  // 显示下一张轮播图图片
  imgs[curIndex].classList.add('show')
}, 3000)

// 向左切换图片按钮
prev.addEventListener('click', function() {
  // 隐藏当前轮播图图片
  imgs[curIndex].classList.remove('show')
  // 根据按钮切换到上一张图片
  curIndex = (imgs.length + curIndex - 1) % imgs.length
  // 显示上一张轮播图图片
  imgs[curIndex].classList.add('show')
})

// 向右切换图片按钮
next.addEventListener('click', function() {
  // 隐藏当前轮播图图片
  imgs[curIndex].classList.remove('show')
  // 根据按钮切换到下一张图片
  curIndex = (curIndex + 1) % imgs.length
  // 显示下一张轮播图图片
  imgs[curIndex].classList.add('show')
})

示例二:基于ES6的实现

const carousel = document.querySelector('.carousel') // 轮播图容器
const imgs = document.querySelectorAll('.carousel img') // 所有轮播图图片
const prev = document.querySelector('.prev') // 向前切换按钮
const next = document.querySelector('.next') // 向后切换按钮

let curIndex = 0 // 当前展示的轮播图图片下标

// 图片自动切换功能
setInterval(() => {
  // 隐藏当前轮播图图片
  imgs[curIndex].classList.remove('show')
  // 取模运算实现循环切换功能
  curIndex = (curIndex + 1) % imgs.length
  // 显示下一张轮播图图片
  imgs[curIndex].classList.add('show')
}, 3000)

// 向左切换图片按钮
prev.addEventListener('click', () => {
  // 隐藏当前轮播图图片
  imgs[curIndex].classList.remove('show')
  // 根据按钮切换到上一张图片
  curIndex = (imgs.length + curIndex - 1) % imgs.length
  // 显示上一张轮播图图片
  imgs[curIndex].classList.add('show')
})

// 向右切换图片按钮
next.addEventListener('click', () => {
  // 隐藏当前轮播图图片
  imgs[curIndex].classList.remove('show')
  // 根据按钮切换到下一张图片
  curIndex = (curIndex + 1) % imgs.length
  // 显示下一张轮播图图片
  imgs[curIndex].classList.add('show')
})

以上就是基于原生JS实现网易轮播图效果的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现网易轮播图效果 - Python技术站

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

相关文章

  • Vue获取DOM元素并修改属性的方法

    下面我将为你详细讲解”Vue获取DOM元素并修改属性的方法”。 1. Vue获取DOM元素的方法 在Vue中,我们通过$refs属性来获取DOM元素,$refs是一个对象,这个对象中存放了所有有ref属性的DOM元素。 下面是一个示例: <template> <div> <div ref="myDiv"&gt…

    css 2023年6月10日
    00
  • CSS3实现王者荣耀匹配人员加载页面的方法

    以下是“CSS3实现王者荣耀匹配人员加载页面的方法”的完整攻略。 什么是王者荣耀匹配人员加载页面 王者荣耀匹配人员加载页面是一个现代化的网页程序,它会根据指定的条件,展示在线等待匹配的战队或个人,提供给用户一个便捷的玩家匹配体验。在该页面中,用户可以查看匹配时的核心信息,如队伍成员、英雄选择、所处段位等,并可以进行交流、挑选匹配或观看等一系列操作。 采用CS…

    css 2023年6月10日
    00
  • CSS3中文字镂空、透明值、阴影效果设置示例小结

    当下,CSS3技术已经被越来越多的Web前端开发人员所使用,其中包括文字的样式设置。通过CSS3技术,我们可以实现更加丰富、有创意的文字效果,比如字体的镂空、透明值、阴影等效果。 本文就主要介绍如何使用CSS3技术实现文字的镂空、透明值和阴影等效果,包括具体的代码实现和效果展示。 1. 文字镂空效果设置 要实现文字镂空效果,可以通过text-stroke属性…

    css 2023年6月9日
    00
  • jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)

    jQuery是一个JavaScript库,它使得JavaScript编写代码变得更加简单。通过使用jQuery,我们可以使用更少的代码来完成许多常见的JavaScript任务,例如处理HTML文档遍历、事件处理、动画和很多其他的操作。同时,它也支持CSS选择器,可以使用CSS样式选择器来定位DOM元素。 奇偶匹配是CSS3中的一种选择器用法,用于匹配列表、表…

    css 2023年6月9日
    00
  • vue-cli设置css不生效的解决方法

    标准化配置文件中添加 CSS 相关的 webpack 配置 在使用 vue-cli 初始化一个项目时,它会默认生成一个标准化的配置文件:webpack.config.js 。如果需要更改 webpack 配置,可以通过在项目根目录下创建 vue.config.js 文件进行自定义配置。 我们可以在 vue.config.js 文件中配置相应的配置项,来解决 …

    css 2023年6月9日
    00
  • vue-cli常用设置总结

    vue-cli常用设置总结 什么是vue-cli Vue CLI是一个基于Vue.js进行快速开发的完整系统,它可以帮助我们快速搭建Vue项目框架和实现一些常见的开发任务。在vue-cli中,主要支持了以下功能: 项目初始化 开发模式构建 生产模式构建 单元测试和端到端测试 插件集成与扩展 安装vue-cli 在使用vue-cli之前,我们需要先安装node…

    css 2023年6月9日
    00
  • CSS的三列式”圣杯布局”方案完全解析

    CSS的三列式”圣杯布局”方案完全解析,以下是详细攻略: 什么是三列式布局? 三列式布局是一种Web布局方法,其中内容被分为三列,分别是左侧列、右侧列和中央列。在这种布局中,中央列是最重要的部分,并且应该占据大部分的宽度。 什么是”圣杯布局”? 圣杯布局是对三列式布局的一种改进。这种布局方法通过使用浮动元素、负边距和相对定位来实现布局。这使得布局非常灵活,并…

    css 2023年6月10日
    00
  • jQuery如何设置背景颜色

    让我们来详细讲解一下如何使用jQuery设置背景颜色。 设置元素背景颜色 使用jQuery设置元素的背景颜色可以通过 css() 方法来实现,该方法可以设置CSS属性。 在 css() 方法中,可以传递一个对象来设置单个或多个 CSS 属性,例如: // 通过id设置元素的背景颜色 $("#elementId").css("ba…

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