10行原生JS实现文字无缝滚动(超简单)

当根据文章中提供的攻略,我们可以用不到十行的原生JS代码实现文字无缝滚动的效果。下面逐步解读这个攻略的实现过程:

第一步:获取DOM元素

首先,需要获取到需要滚动的文字所在的DOM元素。这可以通过document.querySelector()方法来获取。在示例中,需要滚动的文字是包含在一个<div>元素中的,其class为scroll-wrap

const wrapper = document.querySelector('.scroll-wrap');

第二步:克隆DOM元素

由于文字需要无缝滚动,所以需要先将DOM元素克隆一份,再将其添加到原DOM元素的后面,以便实现无缝滚动的效果。

const cloneNode = wrapper.cloneNode(true);
wrapper.appendChild(cloneNode);

注:cloneNode()方法一定要带上true参数才能成功克隆一个节点的所有属性和子节点。

第三步:滚动效果

接下来,通过对克隆后的DOM元素的transform属性进行不断的修改来实现滚动的效果。

let timer = setInterval(() => {
  let d = wrapper.scrollTop++;
  if (d >= cloneNode.offsetTop) {
    wrapper.scrollTop = 0;
  }
}, 20);

这里通过设置一个定时器,每20ms对DOM元素的scrollTop属性进行自增来实现滚动的效果。每次滚动结束的判断条件是克隆DOM节点的高度已经被完全滚过去了,此时需要将DOM元素的scrollTop属性重置为零。

示例说明一

假如需要将滚动的文字换成一个<ul>元素中的数据,该怎么进行修改呢?下面给出一个简单的修改示例。

const list = document.querySelector('.scroll-list'); // 获取需要滚动的列表
const cloneList = list.cloneNode(true); // 克隆列表
list.insertAdjacentElement('afterend', cloneList); // 添加克隆列表到原列表后面

let timer = setInterval(() => {
  let d = list.scrollTop++;
  if (d >= cloneList.offsetTop) {
    list.scrollTop = 0;
  }
}, 20);

示例说明二

如果需要在滚动的过程中加入鼠标悬停事件来停止滚动,该怎么实现呢?下面是一个修改示例。

const wrapper = document.querySelector('.scroll-wrap');
const cloneNode = wrapper.cloneNode(true);
wrapper.appendChild(cloneNode);

let timer = setInterval(() => {
  let d = wrapper.scrollTop++;
  if (d >= cloneNode.offsetTop) {
    wrapper.scrollTop = 0;
  }
}, 20);

wrapper.addEventListener('mouseenter', () => {
  clearInterval(timer); // 鼠标停留时清除定时器
});

wrapper.addEventListener('mouseleave', () => {
  timer = setInterval(() => { // 鼠标离开时再次添加定时器
    let d = wrapper.scrollTop++;
    if (d >= cloneNode.offsetTop) {
      wrapper.scrollTop = 0;
    }
  }, 20);
});

在示例中添加了wrapper.addEventListener()来监听滚动元素的鼠标悬停事件,当鼠标悬停时,清除滚动效果的定时器;而当鼠标离开时,重新创建定时器,实现滚动效果的重新开始。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:10行原生JS实现文字无缝滚动(超简单) - Python技术站

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

相关文章

  • 在页面中引入js的两种方法(推荐)

    在页面中引入JavaScript脚本有两种主要的方法,分别是通过script标签嵌入JavaScript代码和通过外部文件引入JavaScript代码。 嵌入JavaScript代码 要嵌入JavaScript代码,我们可以使用<script>标签来完成,在<script>标签中写入JavaScript代码,将其嵌入HTML页面即可。…

    JavaScript 2023年5月27日
    00
  • JavaScript的DOM事件详解

    下面是JavaScript的DOM事件详解的完整攻略。 什么是DOM事件? DOM事件是指由DOM元素触发的事件,包括如下几种类型: 鼠标事件:click、mousedown、mousemove、mouseup、mouseover、mouseout、mouseenter、mouseleave等。 键盘事件:keydown、keypress、keyup等。 表…

    JavaScript 2023年6月10日
    00
  • Node.js的特点和应用场景介绍

    Node.js的特点和应用场景介绍 什么是Node.js Node.js是基于Chrome V8 JavaScript引擎的一个开源、跨平台的JavaScript运行环境。通过Node.js可以使用JavaScript进行服务器端的开发,以及命令行工具的编写。 Node.js的特点 异步IO Node.js采用事件驱动、非阻塞式IO的编程模型,使得模块之间的…

    JavaScript 2023年5月28日
    00
  • 详解JNA中的回调方法

    详解JNA中的回调方法 JNA(Java Native Access)是一个Java平台下的native代码访问库,它提供了一种使用Java与C或C++等底层语言进行交互的机制。在JNA中,由Java程序发起对底层库的调用,而不需要直接使用Java Native Interface(JNI)。在JNA中,回调方法是进行Java代码与C代码交互的重要方式。本文…

    JavaScript 2023年5月28日
    00
  • JS表单提交验证、input(type=number) 去三角 刷新验证码

    下面我将为你详细讲解“JS表单提交验证、input(type=number) 去三角 刷新验证码”的完整攻略。 JS表单提交验证 表单提交验证一般用于验证用户在表单中输入的数据是否符合要求。下面,我将为你介绍如何使用JS实现表单提交验证。 监听表单提交事件,在表单提交时执行验证函数。 document.getElementById("form&qu…

    JavaScript 2023年6月10日
    00
  • 微信小程序 实战小程序实例

    微信小程序实战攻略 1. 准备工作 在开始之前,我们需要先了解微信小程序的基本概念和开发环境,并完成以下准备工作: 1.1. 注册小程序账号 在微信公众平台上注册小程序账号,获得小程序的开发者身份和权限。 1.2. 下载开发工具 下载官方提供的开发工具 微信开发者工具,完成安装后即可开始开发测试。 1.3. 学习基础知识 学习小程序的常用API和基本语法,熟…

    JavaScript 2023年5月28日
    00
  • JavaScript Window 打开新窗口(window.location.href、window.open、window.showModalDialog)

    JavaScript Window 打开新窗口 有3种常用的JavaScript方法可以打开一个新窗口,它们分别是window.location.href、window.open和window.showModalDialog。接下来,我们将详细讲解它们的使用方法和区别。 window.location.href window.location.href 可以…

    JavaScript 2023年6月11日
    00
  • javascript中的对象创建 实例附注释

    JavaScript中的对象创建分为三种方式:字面量形式、构造函数形式和Object.create()形式,下面分别进行详细讲解。 字面量形式 字面量形式创建对象最常用的方式,它基于JavaScript中对象是一组无序的键值对的集合。下面是一个通过字面量形式创建对象的示例: // 创建一个空对象 var person = {}; // 给对象添加属性和方法 …

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