纯js实现轮播图效果

yizhihongxing

下面是使用纯JS实现轮播图效果的完整攻略:

确定HTML结构

首先,我们需要确定轮播图的HTML结构。可以使用以下结构:

<div id="slider">
  <ul>
    <li><img src="img/slide1.jpg" alt="Slide 1"></li>
    <li><img src="img/slide2.jpg" alt="Slide 2"></li>
    <li><img src="img/slide3.jpg" alt="Slide 3"></li>
  </ul>
</div>

这里使用了<div>标签包裹整个轮播图,并在其中使用了一个<ul>标签作为轮播图的容器,每张图片使用一个<li>标签包裹。<img>标签用于展示图片,可以设置srcalt属性。

设计CSS样式

接下来,我们需要设计用于显示轮播图的CSS样式,例如:

#slider {
  position: relative;
  overflow: hidden;
  width: 800px;
  height: 400px;
}
#slider ul {
  list-style: none;
  margin: 0;
  padding: 0;
  width: 3200px;
  position: absolute;
  left: 0;
  top: 0;
}
#slider li {
  float: left;
  width: 800px;
  height: 400px;
}

这里使用了position属性设置轮播图为相对定位,并使用overflow属性设置隐藏超出容器的内容。<ul>标签的position属性设置为绝对定位,并在左上角设置了相对于父元素的偏移位置。每张图片的<li>标签使用float属性使其并排,宽高设置为和容器相同。

编写JS代码

最后,我们需要编写实现轮播图效果的JS代码。可以使用以下代码实现轮播图自动播放、左右切换功能:

// 获取轮播图元素和图片列表
var slider = document.getElementById("slider");
var sliderList = document.querySelector("#slider ul");

// 获取轮播图的宽高
var sliderWidth = slider.offsetWidth;
var sliderHeight = slider.offsetHeight;

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

// 获取左右箭头元素
var prevBtn = document.getElementById("prev");
var nextBtn = document.getElementById("next");

// 定义轮播图自动播放方法
function autoPlay() {
  // 每隔3秒切换到下一张图片
  setInterval(function() {
    currentIndex++;
    if (currentIndex >= 3) {
      currentIndex = 0;
    }
    moveSlider(-sliderWidth * currentIndex);
  }, 3000);
}

// 定义图片移动方法
function moveSlider(offset) {
  sliderList.style.left = offset + "px";
}

// 绑定左右箭头点击事件
prevBtn.onclick = function() {
  currentIndex--;
  if (currentIndex < 0) {
    currentIndex = 2;
  }
  moveSlider(-sliderWidth * currentIndex);
};
nextBtn.onclick = function() {
  currentIndex++;
  if (currentIndex >= 3) {
    currentIndex = 0;
  }
  moveSlider(-sliderWidth * currentIndex);
};

// 自动播放轮播图
autoPlay();

首先,我们需要获取轮播图相关元素,包括轮播图本身和图片列表等。然后获取轮播图的宽高,并定义当前显示的图片索引。接下来,定义了自动播放和图片移动的方法,并监听左右箭头的点击事件。最后调用自动播放方法,实现轮播图的自动播放。

示例1:
下面是一个完整的示例,包含HTML、CSS和JS部分,可以在此基础上进行二次开发。
https://codepen.io/jeffguo123/pen/XWKBbVE

示例2:
以下是使用requestAnimationFrame方法优化图片移动效果的JS代码:

// 定义动画执行函数
function moveFrame(offset, duration) {
  var startTime = Date.now();
  var startOffset = parseFloat(sliderList.style.left);
  var distance = offset - startOffset;
  var progress, currentOffset;
  function frame() {
    progress = (Date.now() - startTime) / duration;
    if (progress > 1) {
      progress = 1;
    }
    currentOffset = startOffset + distance * progress;
    sliderList.style.left = currentOffset + "px";
    if (progress < 1) {
      requestAnimationFrame(frame);
    }
  }
  requestAnimationFrame(frame);
}

// 定义图片移动方法
function moveSlider(offset) {
  moveFrame(offset, 500);
}

这里使用了requestAnimationFrame方法代替setInterval方法,可以使图片移动效果更加流畅。首先定义了一个动画执行函数moveFrame,接受图片需要移动的偏移量和动画执行的时长。在函数内部,获取开始时间和起始偏移量,并计算出移动距离,然后使用requestAnimationFrame方法进行动画执行,根据当前已经执行的时间、起始偏移量和移动距离计算出当前的偏移量,并设置到图片容器上。如果动画还没有执行完毕,则继续递归调用requestAnimationFrame方法,直到动画执行完毕为止。

参考链接:
https://www.w3cplus.com/javascript/how-to-create-a-responsive-image-slider-in-javascript.html

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

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

相关文章

  • CSS框架sass的简单一览

    CSS框架sass的简单一览 什么是Sass? Sass (Syntactically Awesome Stylesheets) 是一种预处理器,它是 CSS 的一个扩展,在样式表中加入了一些预编译的语法,使得开发者可以更简洁地编写 CSS,同时也使样式表更易于维护和扩展。 Sass的安装 首先确保你电脑里已经安装了Ruby,具体可参考官方文档 https:…

    css 2023年6月9日
    00
  • jQuery+CSS实现一个侧滑导航菜单代码

    下面是详细的jQuery+CSS实现一个侧滑导航菜单代码攻略: 一、思路梳理 实现一个侧滑导航菜单,需要满足以下需求: 需要一个触发菜单显示隐藏的开关按钮。 点击开关按钮时,侧滑菜单从左侧滑出。 点击开关按钮时,页面内容需要向右移动。 点击侧滑菜单上的链接时,需要关闭菜单。 因此,可以考虑使用jQuery实现菜单的显示和隐藏,使用CSS实现菜单的样式和动画效…

    css 2023年6月9日
    00
  • CSS3实现swap交换动画

    为了实现CSS3的swap交换动画效果,可以利用CSS3的transform属性,通过旋转和平移来达到效果。具体步骤如下: 确定网页布局和交换元素 首先,需要确定网页布局和需要交换的元素。可以在HTML中设置两个元素,例如两个div元素,分别表示要被交换的元素。 <div class="swap-element1"></…

    css 2023年6月10日
    00
  • js页面滚动时层智能浮动定位实现(jQuery/MooTools)

    实现 js 页面滚动时层智能浮动定位,可以使用 jQuery 或 MooTools 这样的 JavaScript 库。下面是实现步骤的详细攻略: 步骤一:在 HTML 页面中添加需要浮动定位的层 首先,在你的 HTML 页面中添加需要浮动定位的层。例如,你的页面中有一个 <div> 容器,里面包含一个 <p> 标签和一张图片: &lt…

    css 2023年6月10日
    00
  • css分页样式代码

    在网页设计中,分页样式是指将长篇内容分成多个页面进行展示的样式。本攻略将详细讲解如何实现CSS分页样式,包括基本概念、实现方法、注意事项和示例说明。 1. 基本概念 在网页设计中,分页样式是指将长篇内容分成多个页面进行展示的样式。分页样式通常包括页码、上一页、下一页、首页和尾页等元素。 2. 实现方法 在实现CSS分页样式时,可以使用以下方法: 2.1 使用…

    css 2023年5月18日
    00
  • javascript使用alert实现一个精美的弹窗

    下面是“javascript使用alert实现一个精美的弹窗”的完整攻略: 标题 简介 在Web应用中,弹窗是一种常见的提示方式。本篇攻略将会使用JavaScript中的alert方法实现一个简单但精美的弹窗。 实现步骤 创建弹窗的HTML结构 <div class="modal"> <div class="m…

    css 2023年6月11日
    00
  • webpack中如何使用雪碧图的示例代码

    Webpack是一个模块打包器,可以将多个模块打包成一个或多个静态资源文件,其中包括JavaScript文件、CSS文件、图片等。在Web开发中,对于一些小图标等,我们通常采用雪碧图的方式进行处理,以减少网络请求次数。接下来,我将给出一个使用Webpack中如何使用雪碧图的完整攻略。 步骤一:安装相关工具依赖 在使用Webpack进行雪碧图处理之前,首先需要…

    css 2023年6月10日
    00
  • 规范HTML代码可以节省修改代码的时间

    HTML是网页的基础,它的规范化对于整个网站的可维护性至关重要。以下是规范HTML代码可以节省修改代码的时间的攻略: 1.选择合适的标签和语义 在编写HTML代码时应该尽量选择合适的标签和语义。一个良好的语义结构可以使网页更加易于理解,并且可以让搜索引擎更好地理解网页内容,从而提高网页的排名。 例如,在文章标题中应该使用<h1>标签,而不是其他标…

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