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 节流函数 Throttle 详解

    JavaScript 节流函数 Throttle 详解 什么是节流函数 函数节流是一种通过控制函数执行频率的技术,可以让我们控制一个函数在一段时间时间内执行多少次。它可以解决一些频繁触发事件的问题,例如页面滚动的触发事件。 为何需要使用节流函数 在一些需要频繁执行的L函数中,比如页面滑动事件,如果不做任何优化处理,就会导致多次重复计算、频繁造成 DOM 渲染…

    JavaScript 2023年5月27日
    00
  • js仿360开机效果

    以下是详细的“js仿360开机效果”攻略。 简介 360开机效果是指当我们打开360安全卫士等产品时,会出现一个渐进式加载的进度条动画效果。这个效果也可以用JavaScript来实现,本攻略将介绍如何使用JavaScript实现。 实现思路 实现这个效果的核心思路是: 使用CSS实现加载进度条; 在进度条加载期间,每个等待的时间间隔内,增加对进度条的长度的微…

    JavaScript 2023年6月11日
    00
  • JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码

    JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码 URI是统一资源标识符,URI包含了绝对URI和相对URI两种方式。其中,绝对URI包含协议、主机名、文件名和查询参数,而相对URI只需要相对于当前文件所属的路径进行命名即可。 URI编码就是为了解决URI含有特殊字符而无法被正确显示、传递和处理的问题…

    JavaScript 2023年5月20日
    00
  • js对图片base64编码字符串进行解码并输出图像示例

    解码图片base64编码字符串并输出图像一般需要以下步骤: 从DOM中获取到base64编码图片字符串。 将base64编码图片字符串转换为Blob类型数据。 使用FileReader对象将Blob类型数据读取为图像对象的URL地址。 将URL地址赋值给img标签的src属性,以此输出图像。 下面我们来一步一步详细讲解这个过程,并提供两个示例。 示例1: 先…

    JavaScript 2023年5月19日
    00
  • JS字符串与二进制的相互转化实例代码详解

    JS字符串与二进制的相互转化是JS中常用的操作之一。下面,我将详细讲解如何进行字符串和二进制之间的转换。 字符串转二进制 字符串转二进制可以使用TextEncoder和Uint8Array实现。具体步骤如下: 使用TextEncoder的encode()方法将字符串编码为二进制数据。 将Uint8Array实例化为编码后的二进制数据。 使用Array.pro…

    JavaScript 2023年5月19日
    00
  • vue element el-form 多级嵌套验证的实现示例

    针对“vue element el-form 多级嵌套验证的实现示例”的完整攻略,我给您提供以下步骤: 步骤一:配置element-ui 首先需要在项目中引入Element-UI组件库,并按照文档要求进行全局和局部组件的注册,具体步骤可以参考官方文档:https://element.eleme.cn/#/zh-CN/component/installatio…

    JavaScript 2023年6月10日
    00
  • egg.js的基本使用实例

    下面我为大家讲解一下 Egg.js 的基本使用实例: 简介 Egg.js 是一个基于 Node.js 和 Koa.js 的企业级应用开发框架,它提供了一套易于上手的约定和最佳实践,并基于这些约定和最佳实践提供了适用于企业级应用的各种插件和扩展,同时还支持基于插件的扩展机制,让用户可以根据自己的需要对框架进行个性化定制。 安装 安装 Egg.js 的前提条件是…

    JavaScript 2023年6月11日
    00
  • 浅谈JavaScript for循环 闭包

    接下来我将详细讲解“浅谈JavaScript for循环 闭包”的完整攻略。 1. 什么是 for 循环? for 循环是 JavaScript 中最常见的循环。它允许我们重复执行一个代码块特定的次数。 for 循环的语法格式如下: for (initialization; condition; update) { // 执行循环的代码 } initiali…

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