js实现DOM走马灯特效的方法

来分享一下实现JS DOM走马灯特效的方法攻略。

1. 前置技能

在实现JS DOM走马灯特效之前,你需要具备以下技能:

  • HTML基础知识
  • CSS基础知识
  • JavaScript基础知识
  • 掌握DOM操作基础方法

2. 实现过程

步骤一:HTML骨架搭建

首先,我们需要在HTML中创建容器来承载图片,为了实现走马灯效果,我们需要在容器中创建两个相同的图片列表,并使用CSS使它们横向排列,并隐藏超出容器范围的部分。代码示例如下:

<div class="slider-container">
  <ul class="slider-list1">
    <li><img src="img/1.jpg" alt=""></li>
    <li><img src="img/2.jpg" alt=""></li>
    <li><img src="img/3.jpg" alt=""></li>
    <li><img src="img/4.jpg" alt=""></li>
    <li><img src="img/5.jpg" alt=""></li>
  </ul>
  <ul class="slider-list2">
    <li><img src="img/1.jpg" alt=""></li>
    <li><img src="img/2.jpg" alt=""></li>
    <li><img src="img/3.jpg" alt=""></li>
    <li><img src="img/4.jpg" alt=""></li>
    <li><img src="img/5.jpg" alt=""></li>
  </ul>
</div>
.slider-container {
  width: 600px;
  height: 400px;
  overflow: hidden; /* 超出容器范围的不显示 */
}

.slider-list1,
.slider-list2 {
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex; /* 列表横向排列 */
  width: 1000%; /* 让两个列表总宽度是容器的10倍 */
}

.slider-list1 > li,
.slider-list2 > li {
  flex: 1;
  margin: 0;
  padding: 0;
  transition: all 1s ease; /* 使用过渡效果控制图片左右滑动 */
}

.slider-list2 {
  transform: translateX(-600px); /* 将第二个列表向左移动一个容器宽度的距离 */
}

步骤二:实现走马灯自动播放

接着,我们需要实现走马灯自动播放的效果,具体实现方式是通过定时器每隔一段时间自动切换到下一张图片,并使用CSS3的过渡效果使图片平滑移动。代码示例如下:

var sliderList1 = document.querySelector('.slider-list1')
var sliderList2 = document.querySelector('.slider-list2')

setInterval(function() {
  sliderList1.style.transform = 'translateX(-600px)'
  sliderList2.style.transform = 'translateX(-1200px)'
  setTimeout(function() {
    sliderList1.appendChild(sliderList1.querySelector('li'))
    sliderList1.style.transform = 'none'
    sliderList2.appendChild(sliderList2.querySelector('li'))
    sliderList2.style.transform = 'translateX(-600px)'
  }, 1000)
}, 3000)

步骤三:实现手动控制图片切换

最后,我们需要实现手动控制图片的切换效果,具体实现方式是监听容器的鼠标事件,在鼠标移入时停止自动播放,在鼠标移出时恢复自动播放,同时实现鼠标左右滑动图片的切换效果。代码示例如下:

var sliderContainer = document.querySelector('.slider-container')
var timer = null

sliderContainer.addEventListener('mouseenter', function() {
  clearInterval(timer)
})

sliderContainer.addEventListener('mouseleave', function() {
  timer = setInterval(function() {
    sliderList1.style.transform = 'translateX(-600px)'
    sliderList2.style.transform = 'translateX(-1200px)'
    setTimeout(function() {
      sliderList1.appendChild(sliderList1.querySelector('li'))
      sliderList1.style.transform = 'none'
      sliderList2.appendChild(sliderList2.querySelector('li'))
      sliderList2.style.transform = 'translateX(-600px)'
    }, 1000)
  }, 3000)
})

var startX = 0
var moveX = 0
var moveFlag = false

sliderContainer.addEventListener('mousedown', function(e) {
  startX = e.clientX
  moveFlag = true
})

sliderContainer.addEventListener('mousemove', function(e) {
  if (moveFlag) {
    moveX = e.clientX - startX
    sliderList1.style.transform = 'translateX(' + (-600 + moveX) + 'px)'
    sliderList2.style.transform = 'translateX(' + (-1200 + moveX) + 'px)'    
  }
})

sliderContainer.addEventListener('mouseup', function(e) {
  moveFlag = false
  if (moveX < 0) {
    sliderList1.appendChild(sliderList1.querySelector('li'))
    sliderList1.style.transform = 'none'
    sliderList2.appendChild(sliderList2.querySelector('li'))
    sliderList2.style.transform = 'translateX(-600px)'
  } else if (moveX > 0) {
    sliderList1.prepend(sliderList1.querySelector('li:last-child'))
    sliderList1.style.transform = 'none'
    sliderList2.prepend(sliderList2.querySelector('li:last-child'))
    sliderList2.style.transform = 'translateX(-600px)'
  }
})

3. 示例说明

下面是两个实现JS DOM走马灯特效的示例:

示例一

示例二

以上就是实现JS DOM走马灯特效的方法攻略,希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现DOM走马灯特效的方法 - Python技术站

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

相关文章

  • 详解Javascript ES6中的箭头函数(Arrow Functions)

    我可以为您详细讲解一下Javascript ES6中的箭头函数。 什么是箭头函数? 箭头函数,也被称为lambda函数,是ES6新引入的一种函数定义方式,使用 => 来定义函数,相比传统的函数定义有着更为简洁的语法。箭头函数语法如下所示: (param1, param2, …, paramN) => { statements } 其中,参数列…

    JavaScript 2023年5月27日
    00
  • JavaScript中闭包的写法和作用详解

    JavaScript中闭包的写法和作用详解 什么是闭包 闭包是指有权访问另一个函数作用域中的变量的函数。闭包是JavaScript中最强大的特性之一,也是最容易误用而降低性能的特性之一。 举个例子: function outer() { let name = "Bob"; function inner() { console.log(na…

    JavaScript 2023年6月10日
    00
  • 基于js 各种排序方法和sort方法的区别(详解)

    针对“基于js 各种排序方法和sort方法的区别(详解)”这个话题,我将从以下几个方面进行详细讲解。 一、基础排序算法 在介绍各种排序算法之前,我们先了解一下几个基础排序算法:冒泡排序、插入排序和选择排序。 1. 冒泡排序 冒泡排序的基本思路是比较相邻的元素,如果前面的元素比后面的大,则交换这两个元素。每完成一轮比较,就可以确定一个最大的元素,并且这个最大的…

    JavaScript 2023年6月11日
    00
  • JavaScript 解析数学表达式的过程详解

    JavaScript 解析数学表达式的过程详解 什么是数学表达式? 数学表达式是包含算术,代数和其他运算符的数学表达式,通常用来计算结果。 在 JavaScript 中,我们可以使用 eval() 函数来解析和计算一个字符串中的数学表达式。 JavaScript 解析数学表达式的过程 创建一个字符串变量,并且在这个字符串变量中包含一个数学表达式。 let m…

    JavaScript 2023年5月28日
    00
  • JSONP跨域请求实例详解

    JSONP跨域请求实例详解 什么是JSONP JSONP是JSON with Padding(填充式 JSON 或参数式 JSON)的缩写,是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。JSONP 的优势在于它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制,需服务器端改变响应头来实现跨域。 JSONP一…

    JavaScript 2023年5月27日
    00
  • JS删除数组中某个元素的四种方式总结

    JS删除数组中某个元素的四种方式总结 JavaScript中有多种方式可以删除数组中某个元素,本文将总结其中常用的四种方式并且进行详细介绍。 方法一:splice() splice()方法可以在数组中添加、删除或替换元素。可以通过指定两个参数来删除一个或多个元素。第一个参数指定从哪个索引开始进行删除,第二个参数指定要删除的元素个数。以下是该方法的语法: ar…

    JavaScript 2023年6月10日
    00
  • JavaScript整除运算函数ceil和floor的区别分析

    下面我来为你讲解一下“JavaScript整除运算函数ceil和floor的区别分析”。 1. 序言 在 JavaScript 中,Math.ceil() 和 Math.floor() 都是用于实现上取整和下取整操作的函数。在实际开发过程中,这两个函数经常被用来计算数据的精度。但是这两个函数之间还是有一些微小的差异,接下来我们将会逐一解释它们之间的区别。 2…

    JavaScript 2023年6月11日
    00
  • js小数计算小数点后显示多位小数的实现方法

    下面是讲解“js小数计算小数点后显示多位小数的实现方法”的完整攻略。 实现方法 在JavaScript中,我们可以使用 toFixed() 方法来实现小数点后显示多位小数的功能。该方法可以接受一个整数参数,该参数表示我们想要保留的小数位数。当我们没有传递这个参数时,默认保留0位小数。 简单示例 下面是一个简单的示例。我们将两个小数相加,并且保留2位小数。 c…

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